通过状态转换图构造c或者pascal语言子集的词法分析程序.,词法分析程序的构造讲解.doc...

词法分析程序的构造讲解

通达学院

专业课程设计II

题 目: 词法分析程序的构造

专 业 计 算 机 通 信

学 生 姓 名

班 级 学 号 28班

指 导 教 师 徐 佳

指 导 单 位 计算机学院计算机科学与技术系

日 期 2012.11.12-2012.11.23

教师评语

同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。

教师签名:

年 月 日成绩评定备 注

词法分析程序的构造

课题内容和要求

通过状态转换图构造C或者PASCAL语言子集的词法分析程序。

原理解析:选取语言,例如选取了C语言,选取其中一个子集,例如包含了部分关键字main、float、if、for等等,特殊符号( 、

基本要求:(1)将选取的语言子集编写一个简单程序,放在一个文本文件中;

(2)要将一个个单词区分清楚并归类(例如for属于关键字)。

char cbuffer;

char*keyword[14]={"if","else","for","while","do","float","return","break","continue","int","void","main","const","printf"}; //关键字

char *border[8]={ "," , ";" , "{" , "}" , "(" , ")" ,":=","."}; //分隔符

char *arithmetic[6]={"+" , "-" , "*" , "/" , "++" , "--"}; //运算符

char *relation[7]={"" , ">=" , "==" ,"!="}; //关系运算符

char *lableconst[80]; //标识符

2)函数调用:

search(char searchchar[],int wordtype)//查找类型

alphaprocess(char buffer) //字符处理过程

digitprocess(char buffer) //数字处理过程

otherprocess(char buffer) //分隔符、运算符、逻辑运算符等

main()//主函数

3状态转换图的形式:

■每个状态对应一个带标号的case语句

■转向边对应goto语句switch (wordtype)

{

case 1:

{ for (i=0;i<=13;i++) //关键字

{

if (strcmp(keyword[i],searchchar)==0)

return(i+1);

}

return(0);}

case 2:

{

for (i=0;i<=7;i++) //分隔符

{

if (strcmp(border[i],searchchar)==0)

return(i+1);

}

return(0);

}

case 3:

{

for (i=0;i<=5;i++) //运算符

{

if (strcmp(arithmetic[i],searchc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用C语言编写一个只包含部分保留字和单词符号(见语言子集L)的PASCAL语言的扫描器(词法分析器)。 1、该词法分析器的任务: (1)滤掉源程序中的无用成分,如空格; (2)输出分类记号供语法分析器使用,并产生两个表格:常数表和标识符表,表的数据结构和包含内容可参看书中第八章符号表; (3)识别非法输入,并将其标记为“出错记号”。 2、该词法分析器的功能: 以在下面段落中定义的PASCAL语言子集的源程序作为词法分析程序的输入数据。词法分析器打开该文件后,自文件头开始扫描源程序字符,发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表,一旦发现不符合“单词”定义的源程序字符串时,给出错误提示。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。 3、PASCAL语言子集L----保留字不区分大小写 L={ VAR,BEGIN,ELSE,END,IF,THEN,REAL,INTEGER,=,:=,-,+,*,; ,. }∪{常数}∪{标识符} 4、实验要求: (1)词法分析构造:正规式设计、DFA设计、代码编写; (2)进行词法分析器的测试:测试例程(一小段程序)、测试结果与测试结果分析。 (3)实验报告格式自拟;实验报告中要对实验要求中正规式设计、DFA设计、代码编写、测试例程(3中定义的PASCAL语言子集的源程序段)、测试结果与测试结果分析逐项给予说明。 例子: 本例中单词符号(记号)的种类: 1、保留字; 2、分隔符; 3、运算符; 4、等符 5、常数; 6、标识符 (单词符号的分类可以自己规定,只是要在实验报告中给出说明) 测试例程PASCAL程序清单如下: BEGIN IF I=1 THEN ^ A:=I+1 ELSE *& IF I=2 THEN A:=I+11; END. # 运行词法分析程序后,显示如下结果如下: BEGIN (1,1) IF (1,4) I (6,0) = (4,2) 1 (5,0) THEN (1,5) ^ error, not a word A (6,1) := (2,2) I (6,0) + (3,0) 1 (5,0) ELSE (1,2) * (3,2) & error, not a word IF (1,4) I (6,0) = (4,2) 2 (5,1) THEN (1,5) A (6,1) := (2,2) I (6,0) + (3,0) 11 (5,2) ; (2,1) END (1,3) . (2,3) # error, not a word over 常数表CT:1,2 标识符表LT:I,A

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值