2024秋语法分析作业-B(满分25分)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| 特别注意:第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)当前要求的输出只是为了便于评测,完成编译器中无需出现这些信息,请设计为方便打开/关闭这些输出的方案。 【样例输入】 brush:cpp;toolbar:false { //simple test x=10; y=20; printf("x=%d,y=%d\n",x,y); if(x<y){ printf("x<y\n"); }else{ printf("x>y\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 "x<y\n" <ExpList> RPARENT ) SEMICN ; <Stmt> <BlockItem> <BlockItemList> RBRACE } <Block> ELSETK else LBRACE { <BlockItemList> PRINTFTK printf LPARENT ( STRCON "x>y\n" <ExpList> RPARENT ) SEMICN ; <Stmt> <BlockItem> <BlockItemList> RBRACE } <Block> <Stmt> <BlockItem> <BlockItemList> RBRACE } <Block> <CompUnit> 【评分标准】 按与预期结果不一致的行数扣分,每项扣5%。 【开发语言及环境】用 C/C++/JAVA 实现,平台支持 C++11 标准。评测机所采用的编译学生代码的版本是:C/C++ gcc 8.1.0,Java 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: 词法分析 语法分析 中间代码生成 代码生成 | |

相关推荐
请叫我飞哥@9 分钟前
HTML5 手风琴(Accordion)详解
前端·html·html5
CharlesC++11 分钟前
JAVA类和对象练习
java·开发语言
编码浪子13 分钟前
进军AI大模型-Langchain程序部署
linux·python·langchain
北极糊的狐16 分钟前
vue2框架配置路由设计打印单
开发语言·前端·javascript
梦想平凡18 分钟前
浅谈棋牌游戏开发流程四:核心业务逻辑(二)——房间匹配与对局流程
java·服务器·前端
火鸟219 分钟前
曲速引擎前端代码生成器 6.6.0 介绍
前端
松岛的枫叶21 分钟前
Linux 安装jdk
java·linux·运维
远方2.023 分钟前
使用cursor完成飞机大战
python·pygame
爱开发V30 分钟前
我们公司只有3个人,一个前端,一个后端
前端
大G哥39 分钟前
Spring源码分析 - BeanFactoryPostProcessor 的处理
java·后端·网络协议·spring·rpc