From 249c12cbd63addd18fb057efa17f7f713e11ac5e Mon Sep 17 00:00:00 2001 From: Iseri Nina <14432472+iseri-nina@user.noreply.gitee.com> Date: Fri, 17 May 2024 15:18:39 +0000 Subject: [PATCH] update Reports/lab1/report.md. Signed-off-by: Iseri Nina <14432472+iseri-nina@user.noreply.gitee.com> --- Reports/lab1/report.md | 145 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 3 deletions(-) diff --git a/Reports/lab1/report.md b/Reports/lab1/report.md index cd75c3c..6a066be 100644 --- a/Reports/lab1/report.md +++ b/Reports/lab1/report.md @@ -1,8 +1,147 @@ # lab1实验报告 -学号 姓名 +学号 202108050126姓名 张思泉 ## 实验要求 +根据cminux-f的词法补全lexical_analyer.l文件,完成词法分析器,能够输出识别出的token,type ,line(刚出现的行数),pos_start(该行开始位置),pos_end(结束的位置,不包含) ## 实验难点 +1.实验环境的搭建以及配置,比如ubuntu18.04的安装以及flex编译环境的配置等。 +2.学习并掌握cminus-f语法,提供其词法的正则表达式。 +3.学会利用FLEX并使用正则表达式来编写正确的词法分析器程序,能够识别各种词语 ## 实验设计 +//运算 +ADD = 259, /* 加号:+ */ +SUB = 260, /* 减号:- */ +MUL = 261, /* 乘号:* */ +DIV = 262, /* 除法:/ */ +LT = 263, /* 小于:< */ +LTE = 264, /* 小于等于:<= */ +GT = 265, /* 大于:> */ +GTE = 266, /* 大于等于:>= */ +EQ = 267, /* 相等:== */ +NEQ = 268, /* 不相等:!= */ +ASSIN = 269,/* 单个等于号:= */ + +//符号 +SEMICOLON = 270, /* 分号:; */ +COMMA = 271, /* 逗号:, */ +LPARENTHESE = 272, /* 左括号:( */ +RPARENTHESE = 273, /* 右括号:) */ +LBRACKET = 274, /* 左中括号:[ */ +RBRACKET = 275, /* 右中括号:] */ +LBRACE = 276, /* 左大括号:{ */ +RBRACE = 277, /* 右大括号:} */ + +//关键字 +ELSE = 278, /* else */ +IF = 279, /* if */ +INT = 280, /* int */ +FLOAT = 281, /* float */ +RETURN = 282, /* return */ +VOID = 283, /* void */ +WHILE = 284, /* while */ + +//ID和NUM +IDENTIFIER = 285, /* 变量名,例如a,b */ +INTEGER = 286, /* 整数,例如1,2 */ +FLOATPOINT = 287, /* 浮点数,例如1.1,1.2 */ +ARRAY = 288, /* 数组,例如[] */ +LETTER = 289, /* 单个字母,例如a,z */ + +//others +EOL = 290, /* 换行符,\n或\0 */ +COMMENT = 291, /* 注释 */ +BLANK = 292, /* 空格 */ +ERROR = 258 /* 错误 */ ## 实验结果验证 -请提供部分自己的测试样例 -## 实验反馈 \ No newline at end of file +待测试代码如下 +/* *** */ + +int main(){ + int a = 5;int b[];int c[9]; + float d = .33; + /*** COMMENT1 / + ***/ + while(a) { + a = a-1; + d = d+1.5; + } + a = a + func() + /*** /*COMMENT2 // + ***/ + d = d+7.; + d = d+6.0; + return 1; +} +测试结果如下,经肉眼核对正确 +int 280 3 1 4 +main 285 3 5 9 +( 272 3 9 10 +) 273 3 10 11 +{ 276 3 11 12 +int 280 4 5 8 +a 285 4 9 10 += 269 4 11 12 +5 286 4 13 14 +; 270 4 14 15 +int 280 4 15 18 +b 285 4 19 20 +[] 288 4 20 22 +; 270 4 22 23 +int 280 4 23 26 +c 285 4 27 28 +[ 274 4 28 29 +9 286 4 29 30 +] 275 4 30 31 +; 270 4 31 32 +float 281 5 5 10 +d 285 5 11 12 += 269 5 13 14 +.33 287 5 15 18 +; 270 5 18 19 +while 284 8 5 10 +( 272 8 10 11 +a 285 8 11 12 +) 273 8 12 13 +{ 276 8 14 15 +a 285 9 9 10 += 269 9 11 12 +a 285 9 13 14 +- 260 9 14 15 +1 286 9 15 16 +; 270 9 16 17 +d 285 10 9 10 += 269 10 11 12 +d 285 10 13 14 ++ 259 10 14 15 +1.5 287 10 15 18 +; 270 10 18 19 +} 277 11 5 6 +a 285 12 5 6 += 269 12 7 8 +a 285 12 9 10 ++ 259 12 11 12 +func 285 12 13 17 +( 272 12 17 18 +) 273 12 18 19 +d 285 15 5 6 += 269 15 7 8 +d 285 15 9 10 ++ 259 15 10 11 +7. 287 15 11 13 +; 270 15 13 14 +d 285 16 5 6 += 269 16 7 8 +d 285 16 9 10 ++ 259 16 10 11 +6.0 287 16 11 14 +; 270 16 14 15 +return 282 17 5 11 +1 286 17 12 13 +; 270 17 13 14 +} 277 18 1 2 + +## 实验反馈 +(1)了解gitee并做完成规定的操作花了一些时间,但这个跟github总体还是很相似的,之前有一点涉猎,了解起来也会轻松一些。 + +(2)配置环境花费了很多时间,之前使用的Linux虚拟机VituralBox,这学期重装之后没法开共享文件夹了,也是有很多bug没有解决,索性这次直接使用新的了,参照WSL的教程(前面有说明)配置了基于Win10的Linux ubuntu 20.04,然后一路上解决了一些bug + +(3)关于实验内容,其实还是比较好理解的,就是一个非常简化的C语言,进行词法分析,输出词法分析信息以及5个感兴趣的参数,这些其实都比较简单,唯一有点难度的就是注释的实现(这个在前面有说明),实现还是比较顺利的 \ No newline at end of file -- Gitee