freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理課程設(shè)計(jì)--c-編譯器詞法分析與語(yǔ)法分析的實(shí)現(xiàn)-wenkub.com

2025-01-14 01:33 本頁(yè)面
   

【正文】 output(gcd(x,y))。}void main(void) { int x。 } attr。 union { TokenType op。 ExpKind exp。 struct treeNode * sibling。typedef enum{CallK,OpK,AssignK,ConstK,IdK} ExpKind。//以下這些聲明我都是做完parse后一點(diǎn)一點(diǎn)根據(jù)需求添加的。 tlineno = lineno。iMAXCHILDREN。 int i。 tlineno = lineno。iMAXCHILDREN。 int i。 tlineno = lineno。i++) tchild[i] = NULL。// fprintf(listing,\n build new ExpNode\n)。 tree = treesibling。 } } else fprintf(listing,Unknown node kind\n)。 case UNull: fprintf(listing,param: \n)。 case Array: fprintf(listing,Array %s\n,tree)。 default: fprintf(listing,Unknown declaration kind\n)。 fprintf(listing, %s\n,tree)。 } } else if (treenodekind == DecK) { switch(tree) { case VarK: fprintf(listing,Var_dec: )。 case CallK: fprintf(listing,call: %s\n,tree)。 case ConstK: fprintf(listing,Const: %d\n,tree)。 break。 break。 break。 while (tree != NULL) { printSpaces()。 break。 break。 break。 break。 break。 break。 break。 break。 break。 case SEMI: fprintf(listing,。 case LPAREN_2: fprintf(listing,[)。 case LPAREN_3: fprintf(listing,()。void printToken( TokenType token, const char* tokenString ) {//printToken和printTree的修改很簡(jiǎn)單,直接根據(jù)C 的token和結(jié)點(diǎn)類(lèi)型來(lái)判斷輸出就行 switch(token) { case IF: case ELSE: case INT: case RETURN: case VOID: case WHILE: fprintf(listing, reserved word: %s,tokenString )。 else { psibling = q。 while(token == COM) { TreeNode * q。}TreeNode * arg_list(void) { TreeNode * t = expression()。// fprintf(listing,\nits args time\n)。 token = getToken()。 break。 match(RPAREN_2)。 case LPAREN_2: t = newExpNode(IdK)。 match(LPAREN_3)。 case ID: varToken = copyString(tokenString)。 case LPAREN_3: match(LPAREN_3)。amp。/// fprintf(listing,\nits fact time\n)。 tchild[1] = factor()。 if( p != NULL ) { pchild[0] = t。}TreeNode * term(void) { TreeNode * t = factor()。 t = p。// fprintf(listing,\n+++++%s+++++\n,tokenString)。 if(t != NULL) tchild[1] = additive_expression()。 if(p!=NULL) { p child[0] = t。}TreeNode * simple_expression(void) { TreeNode * t = additive_expression()。 if(token == LPAREN_2) { match(LPAREN_2)。// fprintf(listing,\n+++++%s+++++\n,tokenString)。 tchild[1] = expression()。 if(p!=NULL) { pchild[0] = t。但是再最終測(cè)試時(shí)又發(fā)現(xiàn)在一個(gè)pound_stmt中,{char x;int y;}居然可以,看來(lái)這部分代碼還是不夠嚴(yán)謹(jǐn) TreeNode * t = simple_expression()。 else if(t != NULL) { tchild[0] = expression()。// fprintf(listing,\nits ret time\n)。 match(RPAREN_3)。// fprintf(listing,\n+++++%s+++++\n,tokenString)。 if(t != NULL) tchild[2] = statement()。 if(t != NULL) tchild[0] = expression()。// fprintf(listing,\nits sele time\n)。 token = getToken()。 t = return_stmt()。 case WHILE:// fprintf(listing,\nits iteration_stmt() time\n)。 break。 t = expression_stmt()。}TreeNode * statement(void) { TreeNode * t = NULL。 if( token == SEMI ) { match(SEMI)。 } } } } return t。 q = statement()。 p = t。// fprintf(listing,\n+++++%s+++++\n,tokenString)。 } } } } return t。 while(token == INT) { TreeNode * p = declaration()。// fprintf(listing,\nits L_dec time\n)。 match(RPAREN_1)。 if( (t != NULL) amp。}TreeNode * pound_stmt(void) { TreeNode * t = newStmtNode(CompoundK)。 t = Array。amp。 syntaxError(param wrong)。// fprintf(listing,\n+++++INT+++++\n)。 match(VOID)。//這是參數(shù)結(jié)點(diǎn),區(qū)別與聲明結(jié)點(diǎn)// fprintf(listing,\nits param time\n)。 else { psibling = q。 ( token != ENDFILE )) { TreeNode * q。// fprintf(listing,\nits par_l time\n)。 break。 match(VOID)。}TreeNode * params(void) { TreeNode * t = newParamNode()。 default: syntaxError(declaration wrong)。 match(RPAREN_3)。 case LPAREN_3: match(LPAREN_3)。 break。 switch(token) { case LPAREN_2: t = ArrayK。 }// fprintf(listing,\n+++++%s+++++\n,tokenString)。 default: syntaxError(unexpected token in Type )。 case VOID: t = void。// fprintf(listing,\n+++++%s+++++\n,tokenString)。type_specifieramp。我發(fā)現(xiàn)如果真的有vardeclaration那些東西又麻煩又累贅,就去掉了幾句語(yǔ)法 //amp。| void main (void) | int gcd (int a[],int b) | { {vardeclaration} {statement(if,while...)} }//此處曾糾結(jié)過(guò)很久,最后發(fā)現(xiàn)附錄A開(kāi)始陳列29條語(yǔ)法部分和后來(lái)詳解29條語(yǔ)法時(shí)有不同的地方。}TreeNode * declaration(void) { //declaration vardeclaration | fundeclaration // (int|void) ID [[NUM]]。 if(q!=NULL) { if(t == NULL) t = p = q。 p = t。// fprintf(listing,\n+++++%s+++++\n,tokenString)。}TreeNode * declaration_list(void) { //declarationlist declarationlist declaration | declaration // declaration{declaration} TreeNode * t = NULL。 } return currentToken。\039。 if ((save) amp。 currentToken = ERROR。 currentToken = ID。 case INID: if (!isalpha(c)) { // fprintf(listing,\nis ID over\n)。 save = FALSE。 else ungetNextChar()。 break。=39。 else currentToken = BT。 break。=39。 state = START。 } break。 state = INCOMMENT。 case INASSIGN_1: if (c == 39。*39。 case INCOMMENT: save = FALSE。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 break。 state = N_ASSIGN。 state = E_ASSIGN。 state = R_ASSIGN。 state = L_ASSIGN。)) save = FALSE。) || (c == 39。 state = INASSIGN_1。//是ID // fprintf(listing,\nis alpha\n)。 save = TRUE。 TokenType currentToken。static struct { char* str。static TreeNode * arg_list(void)。 static TreeNode * additive_expression(void)。static TreeNode * return_stmt(void)。static TreeNode * statement(void)。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1