编译原理-词法分析器-仅供参考-不可滥用!.docVIP

  • 12
  • 0
  • 约5.97千字
  • 约 10页
  • 2018-01-02 发布于河南
  • 举报

编译原理-词法分析器-仅供参考-不可滥用!.doc

编译原理-词法分析器-仅供参考-不可滥用!

青岛理工大学 课程实验报告 课程名称 编译原理 班级 实验日期 姓名 未名 学号 实验成绩 实验名称 实验一 词法分析 实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 实验要求 1. 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 : = + - * / = = = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 2. 各种单词符号对应的种别码: 表2.1 各种单词符号对应的种别码 单词符号 种别码 单词符号 种别码 bgin 1 : 17 If 2 := 18 Then 3 20 wile 4 21 do 5 = 22 end 6 23 lettet(letter|digit)* 10 = 24 dight dight* 11 = 25 + 13 ; 26 — 14 ( 27 * 15 ) 28 / 16 # 0 ++ 1313 ! 31 -- 1414 != 3125 == 2525 可继续扩充… 3. 词法分析程序的功能: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,‘x’)(18,:=)(11,9)(26,;)(2,if)…… 实验环境 Visual C++6.0 Win7/Windows XP 实 验 内 容 根据实验要求,设计一个词法分析器,能根据不同的程序,进行分析,获得各标识符的分类表示。对设计的词法分析程序进行验证,实验几组程序编码,判断是否满足要求 (1).主程序示意图 char *rwtab[]={begin,if,then,while,do,end,KEY_WORD_END}; //关键字表 否 是 (2).扫描子程序示意图 首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码 调试过程及实验结果 测试一 输入begin x:=9: if x9 then x:=2*x+1/3; end ;# 后经词法分析输出如图所示: 测试二 输入begin int m=3;n=2;if(m=n) ^s=m;n=m%n;end ;# 后经词法分析输出如图所示: 附 录 (源代码) #include stdio.h //头文件声明 #include string.h //头文件声明 #define KEY_WORD_END key word end//定义关键字结束标志 #define KEY_WORD_SIZE 6 //定义关键字表中的关键字数目 char input[255] ; /*字符输入缓冲区*/ char token[255]; /*单词缓冲区---用来存放构成单词符号的字符串*/ char *rwtab[]={begin,if,then,while,do,end,KEY_WORD_END};//关键字表 char ch; /*字符*/ int syn; /*单词符号种别码*/ int sum; /*存放整数型单词*/ int w_length; /*所读取的单个单词长度*/ int s_length; /*当前所读取的字符串长度*/ int n; //定义简单变量 int IsLetter(char c) //判断是否为字母 { if(((c=z)(c=a))||((c=Z)(c=A))) return 1; else return 0; } int IsDigit(char c) //判断是否为数字 { if(c=0c=9) return 1; else return 0; } int IsBlankSpaceOrNextL

文档评论(0)

1亿VIP精品文档

相关文档