C语言标识符识别的DFA,【编译原理-实验-1】词法分析器最详细设计报告(c++版)

C语⾔标识符识别的DFA,【编译原理-实验-1】词法分析器最详
细设计报告(c++版)
1、实验⽬的
了解词法分析程序的两种设计⽅法:1.根据状态转换图直接编程的⽅式;2.利⽤DFA编写通⽤的词法分析程序。(选作)java
2、实验内容
1.根据状态转换图直接编程
编写⼀个词法分析程序,它从左到右逐个字符的对源程序进⾏扫描,产⽣⼀个个的单词的⼆元式,造成⼆元式(记号)流⽂件输出。在此,词法分析程序做为单独的⼀遍,以下图所⽰。git
具体任务有:
(1)组织源程序的输⼊
(2)识别单词的类别并记录类别编号和值,造成⼆元式输出,获得单词流⽂件
(3)删除注释、空格和⽆⽤符号
(4)发现并定位词法错误,须要输出错误的位置在源程序中的第⼏⾏。将错误信息输出到屏幕上。
(5)对于普通标识符和常量,分别创建标识符表和常量表(使⽤线性表存储),当遇到⼀个标识符或常量时,查标识符表或常量表,若存在,则返回位置,不然返回0⽽且填写符号表或常量表。
标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址
注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码⽣成等阶段逐步填⼊。
东安黑豹常量表结构:常量名,常量值web
2.编写DFA模拟程序(选作)
六自由度
算法以下:
DFA(S=S0,MOVE[ ][ ],F[ ],ALPHABET[ ])
/S为状态,初值为DFA的初态,MOVE[ ][ ]为状态转换矩阵,F[ ] 为终态集,ALPHABET[] 为字母表,其中的字母顺序与MOVE[ ][ ] 中列标题的字母顺序⼀致。/
无人机与客机碰撞
{
Char Wordbuffer[10]=“”//单词缓冲区置空
Nextchar=getchar();//读
i=0;
while(nextchar!=NULL)//NULL表明此类单词
{ if (nextchar!∈ALPHABET[]) {ERROR(“⾮法字符”),return(“⾮法字符”);}
S=MOVE[S][nextchar] //下⼀状态
if(S=NULL)return(“不接受”);//下⼀状态为空,不能识别,单词错误
wordbuffer[i]=nextchar ; //保存单词符号
i++;
nextchar=getchar();
}
Wordbuffer[i]=‘\0’;
If(S∈F)return(wordbuffer); //接受
Else return(“不接受”);
}
该算法要求:实现DFA算法,给定⼀个DFA(初态、状态转换矩阵、终态集、字母表),调⽤DFA(),识别给定源程序中的单词,查看结果是否正确。算法
3、实验要求
1.能对任何S语⾔源程序进⾏分析(S语⾔定义见下⾯)
在运⾏词法分析程序时,应该⽤问答形式输⼊要被分析的S源语⾔程序的⽂件名,⽽后对该程序完成词法分析任务。编程
2.能检查并处理某些词法分析错误
词法分析程序能给出的错误信息包括:总的出错个数,每⼀个错误所在的⾏号,错误的编号及错误信息。
本实验要求处理如下两种错误(编号分别为1,2):
1:⾮法字符:单词表中不存在的字符处理为⾮法字符,处理⽅式是删除该字符,给出错误信息,“某某字符⾮法”。
2:源程序⽂件结束⽽注释未结束。注释格式为:/* …… */数组
4、S语⾔定义
1.保留字和特殊符号表
单词代码
单词
单词助记符
内码值
1
int
int
-
2
char
char
-
3
float
float
-
采矿与安全工程学报void void -
5 const const -
6
for
for
-
7
if
if
束腰
-
8
else else
-
9
then then -
10 while while -
11 switch switch -
12 break
begin
begin
-
14
end
end
-
15
16
17
标识符
id
在符号表中的位置
18
数字(包括整数和实数) num
在常数表中的位置
19
+
+
-
20
-
-
-
21
*
*
-
22
/
%
%
-
24
(
(
-
25
)
)
-
26
苯氧乙醇[
[
-
27
]
]
-
28 29
< relop -
30
> relop -
31
<= relop

本文发布于:2024-09-21 22:49:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/476355.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:词法   单词   错误
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议