网络推广最好的网站有哪些,辽宁建设工程信息网怎么办锁,wordpress 影视采集,cms在线特别注意#xff1a;第17条产生式改为 17) Stmt → while ( Cond ) Stmt 【问题描述】 本次作业只测试一个含简单变量声明、赋值语句、输出语句、if语句和while语句的文法#xff1a; 0) CompUnit → Block 1) Block → { BlockItemList } 2) BlockItemList → BlockItem… 特别注意第17条产生式改为 17) Stmt → while ( Cond ) Stmt 【问题描述】 本次作业只测试一个含简单变量声明、赋值语句、输出语句、if语句和while语句的文法 0) CompUnit → Block 1) Block → { BlockItemList } 2) BlockItemList → BlockItemList BlockItem 3) BlockItemList → EPSILON 4) BlockItem → VarDecl 5) BlockItem → Stmt 6) VarDecl → int VarDeclList ; 7) VarDeclList → VarDeclList , VarDef 8) VarDeclList → VarDef 9) VarDef → Ident 10) VarDef → Ident Exp 11) Stmt → Ident Exp ; 12) Stmt → Exp ; 13) Stmt → ; 14) Stmt → Block 15) Stmt → if ( Cond ) Block 16) Stmt → if ( Cond ) Block else Block 17) Stmt → while ( Cond ) Stmt 18) Stmt → Ident getint(); 19) Stmt → printf(FormatString ExpList ); 20) ExpList → ExpList , Exp 21) ExpList → EPSILON 22) Exp → AddExp 23) Cond → LOrExp 24) PrimaryExp → ( Exp ) 25) PrimaryExp → Ident 26) PrimaryExp → IntConst 27) UnaryExp → PrimaryExp 28) MulExp → UnaryExp 29) MulExp → MulExp * UnaryExp 30) MulExp → MulExp / UnaryExp 31) MulExp → MulExp % UnaryExp 32) AddExp → MulExp 33) AddExp → AddExp MulExp 34) AddExp → AddExp - MulExp 35) RelExp → AddExp 36) RelExp → RelExp AddExp 37) RelExp → RelExp AddExp 38) RelExp → RelExp AddExp 39) RelExp → RelExp AddExp 40) EqExp → RelExp 41) EqExp → EqExp RelExp 42) EqExp → EqExp ! RelExp 43) LAndExp → EqExp 44) LAndExp → LAndExp EqExp 45) LOrExp → LAndExp 46) LOrExp → LOrExp || LAndExp 其对应的LR1分析表共含有170个状态。 请根据该文法设计并实现LR语法分析程序能基于上次作业的词法分析程序所识别出的单词识别出各类语法成分。输入输出及处理要求如下 1需按文法规则用LR分析法法对文法中定义的语法成分进行分析需要使用上次作业中的词法分析程序 2本项作业对应的文法已经在参考代码CFGBlock.java中实现。当然你也可以重新设计文法的数据结构 3本项作业需要根据所学知识自动生成LR1分析表参考代码中给出了分析表的数据结构你也可以自行设计。 4为了方便进行自动评测输入的被编译源文件统一命名为testfile.txt注意不要写错文件名输出的结果文件统一命名为output.txt注意不要写错文件名结果文件中包含如下两种信息 1按词法分析识别单词的顺序按行输出每个单词的信息要求同词法分析作业对于预读的情况不能输出。 2在文法中出现的语法分析成分分析结束前另起一行输出当前语法成分的名字形如“AddExp” 【输入形式】testfile.txt中的符合文法要求的测试程序。 【输出形式】按如上要求将语法分析结果输出至output.txt中。 【特别提醒】1本次作业只考核对正确程序的处理但需要为今后可能出现的错误情况预留接口。 2当前要求的输出只是为了便于评测完成编译器中无需出现这些信息请设计为方便打开/关闭这些输出的方案。 【样例输入】 {//simple testx10;y20;printf(x%d,y%d\n,x,y);if(xy){printf(xy\n);}else{printf(xy\n);}
} 【样例输出】 LBRACE { BlockItemList IDENFR x ASSIGN INTCON 10 PrimaryExp UnaryExp MulExp AddExp Exp SEMICN ; Stmt BlockItem BlockItemList IDENFR y ASSIGN INTCON 20 PrimaryExp UnaryExp MulExp AddExp Exp SEMICN ; Stmt BlockItem BlockItemList PRINTFTK printf LPARENT ( STRCON x%d,y%d\n ExpList COMMA , IDENFR x PrimaryExp UnaryExp MulExp AddExp Exp ExpList COMMA , IDENFR y PrimaryExp UnaryExp MulExp AddExp Exp ExpList RPARENT ) SEMICN ; Stmt BlockItem BlockItemList IFTK if LPARENT ( IDENFR x PrimaryExp UnaryExp MulExp AddExp RelExp LSS IDENFR y PrimaryExp UnaryExp MulExp AddExp RelExp EqExp LAndExp LOrExp Cond RPARENT ) LBRACE { BlockItemList PRINTFTK printf LPARENT ( STRCON xy\n ExpList RPARENT ) SEMICN ; Stmt BlockItem BlockItemList RBRACE } Block ELSETK else LBRACE { BlockItemList PRINTFTK printf LPARENT ( STRCON xy\n ExpList RPARENT ) SEMICN ; Stmt BlockItem BlockItemList RBRACE } Block Stmt BlockItem BlockItemList RBRACE } Block CompUnit 【评分标准】 按与预期结果不一致的行数扣分每项扣5%。 【开发语言及环境】用 C/C/JAVA 实现平台支持 C11 标准。评测机所采用的编译学生代码的版本是C/C gcc 8.1.0Java jdk 1.8。 【参考代码】参考代 src.rar中给出了文法和LR分析表的定义你需要自行设计LR分析程序 【文档要求】完成2023语法分析阶段设计文档 可在词法分析阶段设计文档基础上扩充完成 【提交形式】将所开发的语法分析程序的源文件.cpp/.c/.h/.java不含工程文件打包为zip或rar后提交。对于使用 java 开发的编译器程序运行的入口为 src 目录下 Compiler.java 中的 main 方法。上传请直接打包 src 文件夹如果引用了第三方外部包不推荐请将外部 jar 包文件放到 bin 目录下bin 和 src 两个文件夹同级将 bin 和 src 一起打包后提交即可。注意 mac 压缩会产生额外的文件到压缩包中需删掉额外文件后提交。 答案: Mag1skY/Compiler-Principles: 词法分析 语法分析 中间代码生成 代码生成