词法分析器的设计.docVIP

  • 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)))

{

文档评论(0)

1亿VIP精品文档

相关文档