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

正文內(nèi)容

c-minus詞法分析和語法分析設(shè)計編譯器編譯原理課程設(shè)計-資料下載頁

2025-06-29 07:54本頁面
  

【正文】 if(t!=NULL) { tchild[0] = expression()。 } } match(SEMI)。 return t。}TreeNode * Parser :: expression(void){ TreeNode * t = var()。 if(t==NULL)//不是以ID開頭,只能是simple_expression情況 { t = simple_expression(t)。 } else//以ID開頭,可能是賦值語句,或simple_expression中的var和call類型的情況 { TreeNode * p = NULL。 if(==ASSIGN)//賦值語句 { p = newNode(AssignK)。 p = ()。 match(ASSIGN)。 pchild[0] = t。 pchild[1] = expression()。 return p。 } else //simple_expression中的var和call類型的情況 { t = simple_expression(t)。 } } return t。}TreeNode * Parser :: simple_expression(TreeNode * k){ TreeNode * t = additive_expression(k)。 k = NULL。 if(EQ== || GT== || GEQ== || LT== || LEQ== || NEQ==) { TreeNode * q = newNode(OpK)。 q = 。 qchild[0] = t。 t = q。 match()。 tchild[1] = additive_expression(k)。 return t。 } return t。}TreeNode * Parser :: additive_expression(TreeNode * k){ TreeNode * t = term(k)。 k = NULL。 while((==PLUS)||(==MINUS)) { TreeNode * q = newNode(OpK)。 q = 。 qchild[0] = t。 match()。 qchild[1] = term(k)。 t = q。 } return t。}TreeNode * Parser :: term(TreeNode * k){ TreeNode * t = factor(k)。 k = NULL。 while((==TIMES)||(==OVER)) { TreeNode * q = newNode(OpK)。 q = 。 qchild[0] = t。 t = q。 match()。 qchild[1] = factor(k)。 } return t。}TreeNode * Parser :: factor(TreeNode * k){ TreeNode * t = NULL。 if(k!=NULL)//k為上面?zhèn)飨聛淼囊呀?jīng)解析出來的以ID開頭的var,可能為call或var { if(==LPAREN amp。amp。 knodekind!=Arry_ElemK) //call { t = call(k)。 } else { t = k。 } } else//沒有從上面?zhèn)飨聛淼膙ar { switch() { case LPAREN: match(LPAREN)。 t = expression()。 match(RPAREN)。 break。 case ID: k = var()。 if(LPAREN== amp。amp。 knodekind!=Arry_ElemK) { t = call(k)。 } break。 case NUM: t = newNode(ConstK)。 if((t!=NULL)amp。amp。(==NUM)) { t = atoi(())。 } match(NUM)。 break。 default: syntaxError()。 currentToken = getToken()。 break。 } } return t。}TreeNode * Parser :: var(void){ TreeNode * t = NULL。 TreeNode * p = NULL。 TreeNode * q = NULL。 if(==ID) { p = newNode(IdK)。 p = ()。 match(ID)。 if(==LMBRACKET) { match(LMBRACKET)。 q = expression()。 match(RMBRACKET)。 t = newNode(Arry_ElemK)。 tchild[0] = p。 tchild[1] = q。 } else { t = p。 } } return t。}TreeNode * Parser :: call(TreeNode * k){ TreeNode * t = newNode(CallK)。 if(k!=NULL) tchild[0] = k。 match(LPAREN)。 if(==RPAREN) { match(RPAREN)。 return t。 } else if(k!=NULL) { tchild[1] = args()。 match(RPAREN)。 } return t。}TreeNode * Parser :: args(void){ TreeNode * t = newNode(ArgsK)。 TreeNode * s = NULL。 TreeNode * p = NULL。 if(!=RPAREN) { s = expression()。 p = s。 while(==COMMA) { TreeNode * q。 match(COMMA)。 q = expression()。 if(q!=NULL) { if(s==NULL) { s = p = q。 } else { psibling = q。 p = q。 } } } } if(s!=NULL) { tchild[0] = s。 } return t。}int main(int argc, char * argv[]){ Parser p。 system(PAUSE)。 return EXIT_SUCCESS。}:includestringincludefstreamusing namespace std。//19種節(jié)點類型,分別表示int、id、void、數(shù)值、變量聲明、數(shù)組聲明、函數(shù)聲明、函數(shù)聲明參數(shù)列表、函數(shù)聲明參數(shù)、復(fù)合語句體、if、while、return、賦值、運算、數(shù)組元素、函數(shù)調(diào)用、函數(shù)調(diào)用參數(shù)列表、未知節(jié)點typedef enum {IntK, IdK, VoidK, ConstK, Var_DeclK, Arry_DeclK, FunK, ParamsK, ParamK, CompK, Selection_StmtK, Iteration_StmtK, Return_StmtK, AssignK, OpK, Arry_ElemK, CallK, ArgsK, UnkownK} Nodekind。typedef enum {Void,Integer} ExpType。ofstream fout_Tree()。//輸出語法樹到文件const int MAXCHILDREN = 4。//treeNode定義 包括子節(jié)點、兄弟節(jié)點、所處行號、節(jié)點類型、屬性、表達式返回類型typedef struct treeNode{ struct treeNode * child[MAXCHILDREN]。 struct treeNode * sibling。 int lineno。 Nodekind nodekind。 union { TokenType op。 int val。 const char * name。} attr。 ExpType type。} TreeNode。class Parser{public: Parser()。 TreeNode * parse(void)。 TreeNode * syntaxTree。//語法樹根節(jié)點 private: Scanner scanner。 Token currentToken。//當前獲取的Token Token lastToken。//前一個Token int tokenIndex。//配合getToken使用,每獲取一次,tokenIndex自增 bool Error。//語法分析是否出錯 int step。//用于節(jié)點輸出時表征節(jié)點的先行空格 Token getToken()。//獲取保存在scanner中TokenList數(shù)組中的Token,每次獲取完之后數(shù)組下標指向下一個 void printSpace(int n)。//打印n個空格 void syntaxError(string s)。//報錯的函數(shù),報告出錯位置(行號)、出錯位置附近的Token void match(TokenType ex)。//與目標Token類型ex匹配,如果匹配成功則獲取下一個Token(為currentToken賦值),否則報錯 void printTree(TreeNode * t)。//打印生成的語法樹 TreeNode * newNode(Nodekind k)。//根據(jù)節(jié)點類型新建節(jié)點 TreeNode * declaration_list(void)。 TreeNode * declaration(void)。 TreeNode * params(void)。 TreeNode * param_list(TreeNode * k)。 TreeNode * param(TreeNode * k)。 TreeNode * pound_stmt(void)。 TreeNode * local_declaration(void)。 TreeNode * statement_list(void)。 TreeNode * statement(void)。 TreeNode * expression_stmt(void)。 TreeNode * selection_stmt(void)。 TreeNode * iteration_stmt(void)。 TreeNode * return_stmt(void)。 TreeNode * expression(void)。 TreeNode * var(void)。 TreeNode * simple_expression(TreeNode * k)。 TreeNode * additive_expression(TreeNode * k)。 TreeNode * term(TreeNode * k)。 TreeNode * factor(TreeNode * k)。 TreeNode * call(TreeNode * k)。 TreeNode * args(void)。}。4. 測試結(jié)果,:/* A program to perform Eucild39。s Algorithm to pute gcd. */int gcd (int u, int v){ if (v==0) return u。 else return gcd(v,uu/v*v)。 /* uu/v*v== u mod v */}void main(void){ int x。 int y。 x=input()。 y=input()。 output(gcd(x,y))。} 測試結(jié)果分析 運行程序結(jié)果:::正確語法分析的結(jié)果輸出,: 錯誤處理:(“return ”改為“retu
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1