精易论坛

标题: 【编译原理】简单词法分析器的实现 [打印本页]

作者: 阿龙    时间: 2022-2-28 04:37
标题: 【编译原理】简单词法分析器的实现
原帖为C++实现,用易语言复写一边供大家学习,也正好复习一遍编译原理。

一.实验题目:编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表。如果产生词法错误,则显示错误信息、位置,并试图从错误中恢复。简单的恢复方法是忽略该字符(或单词)重新开始扫描。

二.词法分析规则:
<标识符>::=<字母>
<标识符>::=<标识符><字母>
<标识符>::=<标识符><数字>
<无符号整数>::=<数字>
<无符号整数>::=<数字序列><数字>
<数字序列>::=<数字序列><数字>
<数字序列>::=<数字>
<字母>::=a|b|c|……|x|y|z
<数字>::=0|1|2|3|4|5|6|7|8|9

<加法运算符>::=+|-
<乘法运算符>::=*|/
<关系运算符>::=<|>|!=|>=|<=|==
<分界符>::=,|;|(|)|{|}
<保留字>::=main|int|if|else|while|do

三.实现任务:
1.根据给定的词法规则,识别单词,填写相应的表。
2.忽略空白字符,注释
3.产生词法错误时,显示错误信息、位置,并试图从错误中恢复。

四.实现流程:
1.读到空格则略过,读下一个字符;若读到的是字母,就再接着读,直到读到的既不是字母也不是数字也不是下划线,并将读到的写入到token数组;
2.若读到的是数字,直到读到的不是数字或小数点,将读到的写入到token数组;
3.若读到的是<|>|=,则再读入下一位,若为=,则该运算符为<=|>=|==,若为其他字符,则返回<|>|=的种别码;若读到的是/,则读下一位,若为*,则说明之后为注释内容,一直读入直到读入*,并判断下一位是否为/,若是则注释结束,不是继续往下一位读入;若读入\n,则行数加一,若读入的字符与以上都不匹配,则报错,并输出出错行数。


五.种别码:


六.代码实现

七.样例结果
样例:

结果:




词法分析器.zip (272.02 KB, 下载次数: 43)



原帖地址:https://blog.csdn.net/qq_36711003/article/details/82975586



作者: xjshuaishuai    时间: 2022-2-28 08:17

作者: wuqingg    时间: 2022-2-28 08:39
用易语言写编译器编译易语言的程序...
作者: 渡不得……    时间: 2022-2-28 10:30

作者: 寡人i    时间: 2022-3-1 01:47
来看看
作者: asd87565408123    时间: 2022-3-2 22:46
支持开源~!感谢分享
作者: 凉忆亦凉心    时间: 2022-3-4 20:23

作者: 落寞23333    时间: 2022-3-12 21:32
我超牛逼
作者: zifeiyu    时间: 2022-6-9 16:42
66666666666666666666666
作者: lyjzyq    时间: 2023-11-3 13:19
学习学习学习
作者: lyjzyq    时间: 2023-11-3 13:20
学习学习学习




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4