pbp Δημοσ. 24 Αυγούστου 2013 Δημοσ. 24 Αυγούστου 2013 Μπορεί κάποιος να με βοηθήσει στο σκεπτικό για μετατροπή τηςIF ELSEσε απλή IF (χωρις ELSE) γνωρίζοντας τον κώδικα της πρώτης περίπτωσης? void ProcessIfElseStmt(AstNode *p, int lev,int lvalue, int leftchild) { symbol *sn,*lhs; int savedLoc1, savedLoc2,currentLoc; emitComment("if:condition"); CodeGeneration(p->pAstNode[0],lev+1,lvalue,TRUE); lhs=pop_vs(); emitRM("LD",ac,m_offset,mp,"Load the result to AC"); m_offset++; savedLoc1= emitSkip(1); CodeGeneration(p->pAstNode[1],lev+1,lvalue,TRUE); savedLoc2=emitSkip(1); currentLoc=emitSkip(0); emitBackup(savedLoc1); emitRM_Abs("JEQ",ac,currentLoc,"if:jmp to else"); emitRestore(); CodeGeneration(p->pAstNode[2],lev+1,lvalue,TRUE); currentLoc=emitSkip(0); emitBackup(savedLoc2); emitRM_Abs("LDA",pc,currentLoc,"if:jmp to endif"); emitRestore(); discard_symbol(lhs); } εγω κάνω αυτό αλλά δε δουλεύει :/ void ProcessIfStmt(AstNode *p, int lev,int lvalue) { symbol *sn,*lhs; int savedLoc1,currentLoc; emitComment("if:condition"); CodeGeneration(p->pAstNode[0],lev+1,lvalue,FALSE); lhs=pop_vs(); emitRM("LD",ac,m_offset,mp,"Load the result to AC"); m_offset++; savedLoc1= emitSkip(1); //if CodeGeneration(p->pAstNode[1],lev+1,lvalue,FALSE); currentLoc=emitSkip(0); emitBackup(savedLoc1); emitRM_Abs("LDA",pc,currentLoc,"if:jmp to endif"); emitRestore(); discard_symbol(lhs); } Ελπίζω να καταλαβαίνεται τι κάνει κάθε μια συνάρτηση απο την επικεφαλίδα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα