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

正文內(nèi)容

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

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

【正文】 ar* tokenString ) {//printToken和printTree的修改很簡(jiǎn)單,直接根據(jù)C 的token和結(jié)點(diǎn)類型來判斷輸出就行 switch(token) { case IF: case ELSE: case INT: case RETURN: case VOID: case WHILE: fprintf(listing, reserved word: %s,tokenString )。 break。 case RPAREN_3: fprintf(listing,))。 break。 case LPAREN_3: fprintf(listing,()。 break。 case RPAREN_2: fprintf(listing,])。 break。 case LPAREN_2: fprintf(listing,[)。 break。 case COM: fprintf(listing,)。 break。 case SEMI: fprintf(listing,。)。 break。 case RPAREN_1: fprintf(listing,})。 break。 case LPAREN_1: fprintf(listing,{)。 break。 case NEQ: fprintf(listing,!=)。 break。 case EQ: fprintf(listing,==)。 break。 case BET: fprintf(listing,=)。 break。 case BT: fprintf(listing,)。 break。 case LET: fprintf(listing,=)。 break。 case LT: fprintf(listing,)。 break。 case OVER: fprintf(listing,/)。 break。 case TIMES: fprintf(listing,*)。 break。 case MINUS: fprintf(listing,)。 break。 case PLUS: fprintf(listing,+)。 break。 case ASSIGN: fprintf(listing,=)。 break。 case ENDFILE: fprintf(listing,EOF)。 break。 case NUM: fprintf(listing,NUM, val= %s,tokenString)。 break。 case ID: fprintf(listing,ID, name= %s, tokenString)。 break。 case ERROR: fprintf(listing,ERROR: %s,tokenString)。 break。 default: fprintf(listing,Unknown token: %d, token)。 }}void printTree( TreeNode * tree ){ int i。 INDENT。 while (tree != NULL) { printSpaces()。 if (treenodekind==StmtK) { switch (tree) { case IterationK: fprintf(listing,While:\n)。 break。 case SelectionK: fprintf(listing,Selection:\n)。 break。 case CompoundK: fprintf(listing,Compound:\n)。 break。 case ReturnK: fprintf(listing,Return:\n)。 break。 case ExpressionK: fprintf(listing,Expression:\n)。 break。 default: fprintf(listing,Unknown ExpNode statement kind\n)。 break。 } } else if (treenodekind==ExpK) { switch (tree) { case OpK: fprintf(listing,Op: )。 printToken(tree,\0)。 break。 case ConstK: fprintf(listing,Const: %d\n,tree)。 break。 case IdK: fprintf(listing,Id: %s\n,tree)。 break。 case CallK: fprintf(listing,call: %s\n,tree)。 break。 default: fprintf(listing,Unknown ExpNode expression kind\n)。 break。 } } else if (treenodekind == DecK) { switch(tree) { case VarK: fprintf(listing,Var_dec: )。 fprintf(listing, %s\n,tree)。 break。 case ArrayK: fprintf(listing,Array_dec: )。 fprintf(listing, %s\n,tree)。 case FunK: fprintf(listing,Fun_dec: )。 fprintf(listing, %s\n,tree)。 break。 default: fprintf(listing,Unknown declaration kind\n)。 break。 } } else if (treenodekind == ParamK) { switch(tree) { case Var: fprintf(listing,Var %s\n,tree)。 break。 case Array: fprintf(listing,Array %s\n,tree)。 break。 case Null: fprintf(listing,param void\n)。 break。 case UNull: fprintf(listing,param: \n)。 break。 default: fprintf(listing,Unknown params kind\n)。 break。 } } else fprintf(listing,Unknown node kind\n)。 for (i=0。iMAXCHILDREN。i++) printTree(treechild[i])。 tree = treesibling。 } UNINDENT。}TreeNode * newExpNode(ExpKind kind) {// TreeNode * t = (TreeNode *) malloc(sizeof(TreeNode))。 int i。// fprintf(listing,\n build new ExpNode\n)。 if (t==NULL) fprintf(listing,Out of memory error at line %d\n,lineno)。 else { for (i=0。iMAXCHILDREN。i++) tchild[i] = NULL。 tsibling = NULL。 tnodekind = ExpK。 t = kind。 tlineno = lineno。 t = void。 } return t。}TreeNode * newParamNode(void) {//Param和Dec結(jié)點(diǎn)的創(chuàng)建根據(jù)結(jié)點(diǎn)所有的內(nèi)容,仿造Stmt和Exp結(jié)點(diǎn)的創(chuàng)建就可以解決 TreeNode * t = (TreeNode *) malloc(sizeof(TreeNode))。 int i。// fprintf(listing,\n build new ParamNode\n)。 if (t==NULL) fprintf(listing,Out of memory error at line %d\n,lineno)。 else { for (i=0。iMAXCHILDREN。i++) tchild[i] = NULL。 tsibling = NULL。 tnodekind = ParamK。 tlineno = lineno。 t = Null。 } return t。}TreeNode * newDecNode(void) { TreeNode * t = (TreeNode *) malloc(sizeof(TreeNode))。 int i。// fprintf(listing,\n build new DecNode\n)。 if (t==NULL) fprintf(listing,Out of memory error at line %d\n,lineno)。 else { for (i=0。iMAXCHILDREN。i++) tchild[i] = NULL。 tsibling = NULL。 tnodekind = DecK。 tlineno = lineno。 } return t。}、TokenType、treeNode與結(jié)點(diǎn)類型的聲明()typedef enum {//這個(gè)聲明是根據(jù)C 的詞法原理來定義的 ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, ID,NUM, ASSIGN,PLUS,MINUS,TIMES,OVER,LT,LET,BT,BET,EQ,NEQ,// = + * / = = == != LPAREN_1,RPAREN_1,SEMI,COM,LPAREN_2,RPAREN_2,LPAREN_3,RPAREN_3,LIN,RIN// { } 。 , [ ] ( ) /* */} TokenType。//以下這些聲明我都是做完parse后一點(diǎn)一點(diǎn)根據(jù)需求添加的。這部分一開始沒有規(guī)劃真是頭疼。本以為不用改的,typedef enum{StmtK,ExpK,DecK,ParamK} NodeKind。typedef enum{CompoundK,ExpressionK,SelectionK,ReturnK,IterationK} StmtKind。typedef enum{CallK,OpK,AssignK,ConstK,IdK} ExpKind。typedef enum{FunK,VarK,ArrayK} DecKind。typedef enum{Var,Array,Null,UNull} ParamKind。//因?yàn)樵贑 中有了函數(shù)類型(int,void),并且根據(jù)需要添加了DecKind dec和ParamKind paramtypedef struct treeNode { struct treeNode * child[MAXCHILDREN]。 struct treeNode * sibling。 int lineno。 NodeKind nodekind。 union { StmtKind stmt。 ExpKind exp。 DecKind dec。 ParamKind param。} kind。 union { TokenType op。 int val。 char * name。 char * type。 } attr。} TreeNode。測(cè)試結(jié)果、測(cè)試代碼:/*asdasdasd*/int gcd (int u,int v) { if (v==0) return u。 else return gcd(v,uu/v*v)。}void main(void) { int x。 int y。 x = input()。 y = input()。 output(gcd(x,y))。 }、測(cè)試界面的輸入:、測(cè)試界面的結(jié)果(
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1