# SysY2022:基于flex的词法分析(C语言实现)
目录结构:
```
.
├── README.md
├── flex
│ └── sysy.l #词法规则文件(flex)
└── test_cases #测试用例
├── case_1.c
├── case_2.c
├── case_3.c
├── case_4.c
└── case_5.c
```
# 实验任务
在文件sysy.l中补充适当的词法规则和动作代码,设计识别`SysY2022`语言单词符号的词法分析器。
你需要补充的内容有:
(1) 标识符ID;
(2) int型字面量INT_LIT;
(3) float型字面量FLOAT_LIT;
(4) 词法错误LEX_ERR
等词法规则的定义,以及对应的动作代码。
# 要求
1. 对于识别出的合法的单词,直接输出:
识别出的单词 : 种别名称 (“:”号前后各留一空格,一个单词占一行)
2. 对于所有的词法错误,应该报告词法错误,例如: '9ab','2f'等,应该报告错误,报告格式为:
Lexical error - 行号 : 识别出来的串 (如'9ab', “-”和“:”号前后各留一空格,每报告一个词法错误之后换行)
3. 对于whitespace和注释,直接忽略;
对于以下程序
```
int main(){
float a, b;
int c = 085;
a = 020e-04f;
b = getfloat();
putfloat(a + b);
putch(10);
return 0;
}
```
词法分析的输出为
```
int : INT
main : ID
( : LP
) : RP
{ : LC
float : FLOAT
a : ID
, : COMMA
b : ID
; : SEMICOLON
int : INT
c : ID
= : ASSIGN
Lexical error - line 3 : 085
; : SEMICOLON
a : ID
= : ASSIGN
020e-04f : FLOAT_LIT
; : SEMICOLON
b : ID
= : ASSIGN
getfloat : ID
( : LP
) : RP
; : SEMICOLON
putfloat : ID
( : LP
a : ID
+ : ADD
b : ID
) : RP
; : SEMICOLON
putch : ID
( : LP
10 : INT_LIT
) : RP
; : SEMICOLON
return : RETURN
0 : INT_LIT
; : SEMICOLON
} : RC
```
# flex使用手册
https://www.cs.princeton.edu/~appel/modern/c/software/flex/flex_toc.html
# SysY语言的定义
https://gitlab.eduxiji.net/nscscc/compiler2022/-/blob/master/SysY2022%E8%AF%AD%E8%A8%80%E5%AE%9A%E4%B9%89-V1.pdf
# 编译环境
(1) Ubuntu 18.04 LTS 及以上
(2) flex 2.6及以上
(3) GNU Build-essential (gcc,g++,...),gcc 7.5及以上
# 评测
```
cd flex
flex sysy.l
gcc -o scanner lex.yy.c
./scanner ../test_cases/case_1.c
./scanner ../test_cases/case_2.c
./scanner ../test_cases/case_3.c
./scanner ../test_cases/case_4.c
./scanner ../test_cases/case_5.c
```
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
SysY2022:基于flex的词法分析C语言实现项目资源.zip (37个子文件)
.git\logs\refs\remotes\origin\HEAD 195B
test_cases\case_1.c 86B
test_cases\case_2.c 111B
.git\hooks\update.sample 4KB
.git\hooks\applypatch-msg.sample 478B
.git\hooks\pre-push.sample 1KB
.git\objects\pack\pack-cf9c5c49bd2003507836d64668d7a320e96c2483.pack 31KB
.git\hooks\pre-applypatch.sample 424B
.git\packed-refs 112B
test_cases\case_4.c 310B
.git\refs\remotes\origin\HEAD 30B
.git\description 73B
LICENSE 35KB
flex\sysy.l 3KB
.git\logs\HEAD 195B
.git\objects\pack\pack-cf9c5c49bd2003507836d64668d7a320e96c2483.idx 3KB
.git\hooks\pre-rebase.sample 5KB
.git\hooks\prepare-commit-msg.sample 1KB
.git\objects\pack\pack-cf9c5c49bd2003507836d64668d7a320e96c2483.rev 356B
test_cases\case_5.c 530B
.git\index 793B
.git\hooks\pre-commit.sample 2KB
.git\logs\refs\heads\main 195B
.git\HEAD 21B
sample.txt 89B
.git\hooks\push-to-checkout.sample 3KB
.git\hooks\fsmonitor-watchman.sample 5KB
.git\hooks\pre-merge-commit.sample 416B
.git\info\exclude 240B
.git\hooks\pre-receive.sample 544B
test_cases\case_3.c 144B
README.md 2KB
.git\hooks\commit-msg.sample 896B
.git\config 303B
.git\hooks\post-update.sample 189B
.git\refs\heads\main 41B
.git\hooks\sendemail-validate.sample 2KB
共 37 条
- 1
资源评论
项目资源总站点博客专家
- 粉丝: 1606
- 资源: 6980
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功