- 0
- 0
- 约5.64千字
- 约 15页
- 2024-01-20 发布于江西
- 举报
学生实验报告册
2023——2023学年第1学期
学院:信息与电气工程学院
专业:计算机科学与技术
姓名:李金
学号:
班级:计算机2班
实验一词法分析器的设计
一、实验目的
通过设计编制一个调试一个具体的此法分析程序,理解词法分析在编译程序中的作用。
加深对有穷自动机模型的理解。
掌握词法分析程序的实现方法和规定。
用C语言,对一个简朴语言的子集编制一个一遍扫描的程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。
编制一个读单词过程,从输入的源程序中,辨认出各个具有独立意义的单词,即基本保存字、标记符、常数、运算符、分隔符五大类,并依次输出各个单词的内部编码及单词符号自身值(碰到错误时课显示“Error”,然后跳过错误部分继续显示)
程序规定
程序输入/输出示例
如源程序为C语言,输入如下一段:
Main()
{
inta,b;
a=10;
b=a+20;
}
规定输出如下图
(2,main)(4,=)
(5,() (3,10)
(5,)) (5,;)
(5,{) (2,b)
(1,int) (4,=)
(2,a) (2,a)
(5,,) (4,+)
(2,b) (3,20)
(5,;) (5,;)
(2,a) (5,})
规定:
辨认保存字:if,int,for,while,do,return,break,continue;单词辨认码为1;
其他的都辨认为标记符;单词辨认码为2;
常数为无符号整数;单词辨认码为3;
运算符涉及:+,-,*,/,=,,=,!=;单词辨认码为4;
分隔符涉及:,、;、{、}、(、);单词辨认码为5;
实验环节
定义部分:定义常亮、变量、数据结构。
初始化:从文献源程序所有输入到字符缓冲区中。
取单词前后去掉多余空格和回车空行。
取单词:读出单词的每一个字符,组成单词,分析类型。
辨认标记符(涉及保存字)
关键字作为特殊标记符解决,把他们预先安排在一张表格中(保存字表),当扫描程序辨认标记符时,查找关键字,否则一般标记符,
辨认保存字:if,int,for,while,do,return,break,continue;单词辨认码为1;其他的都辨认为标记符;单词辨认码为2。
(2)辨认常数:
注意:常数的有效范围,假如产生溢出则设立syn的值,与主函数的代码呼应。常数为无符号整数;单词辨认码为3。
(3)辨认运算符
区分运算符和=,和=,+和++,--和--。
运算符涉及:+,-,*,/,=,,=,=,!=;单词辨认码为4;
(4)辨认分隔符
分隔符涉及:,、;、{、}(、)单词辨认码为5;
流程图
初始化
初始化
文献结束 忽略空格
文献结束
返回是
返回
否
拼字符串字母 数字 运算符界符等符号其他
拼字符串
报错拼数相应不同符号给出相应的
报错
拼数
相应不同符号给出相应的syn
S
Syn=3
是否
是否是关键字
否
返回相应SynSyn=2
返回
相应Syn
Syn=2
程序代码
#includestdio.h
#includestring.h
charprogram[80],token[8];
charch;
intsyn,p,m,n,row;
longintsum;
char*key[8]={if,int,for,while,do,return,break,continue};
voidscaner()
{
for(n=0;n8;n++)
token[n]=NULL;
m=0;
ch=program[p++];
while((ch==)||(ch==\n))
ch=program[p++];
if(((ch=z)(ch=a))||((ch=Z)(ch=A)))
{
//标记符判断
while(((ch=z)(ch=a))||((ch=Z)(ch=A))||((ch=0)(ch=9)))
{
您可能关注的文档
最近下载
- AMS2315G 国外国际标准规范.pdf VIP
- 二手车鉴定评估报告表.pdf VIP
- 会议记录表-模板.xlsx VIP
- 生产安全重大事故隐患判定标准宣贯培训记录.docx VIP
- 2026年商丘职业技术学院单招职业技能考试题库含答案详解.docx VIP
- 考试三类职业适应性测试试题.docx VIP
- 009 水泵控制柜合格证及检验报告.pdf VIP
- T∕ZZB 1762-2020 恒温混水阀标准规范.docx VIP
- 人教版(2026春新教材)二年级下册语文教案全册.docx
- 中国国家标准 GB/T 11017.1-2024额定电压66 kV(Um=72.5 kV)和110 kV(Um=126 kV)交联聚乙烯绝缘电力电缆及其附件 第1部分:试验方法和要求.pdf
原创力文档

文档评论(0)