实验一词法分析(版本二) 下载本文

内容发布更新时间 : 2024/12/27 21:16:32星期一 下面是文章的全部内容请认真阅读。

J 实验一 词法分析

一、实验目的:

通过本实验理解词法分析的整个过程,处理对象和处理的结果,了解词法分析在整个编译过程中的作用。 二、实验学时:

4学时。 三、实验内容

根据给出的简单语言的词法构成规则和单词集合,编制词法分析程序,要求能将用给定简单语言书写的源程序进行词法分析,同时建立相应的符号表文件存放正确的单词。输出分析结果于文件中,包括:

(1) 正确的单词符号及其单词种类的序对二元组。 (2) 错误单词的信息。若有错误,必须输出错误单词在源程序中的行位置。 具体输出形式为:二元组:(单词种类,单词内码值)

或三元组:(单词种类,单词内码值,源程序中的行号)

单词种类见五。 四、实验方法

构造识别单词集的自动机,编写程序实现。 五、实验的处理单词集

(注:单词种类统一分类如下:) 单词符号 单词种类 任意变量名 0 ( 1 ) 2 { 3 } 4 ; 5 = 6 + 7 * 8 > 9 < 10 , 11 ‘ 12 整型常数 30 main 20 int 21 if 22 then 23 else 24 return 25 出错 100

六、处理程序例和处理结果例 例1:源程序: main() {

y=x-1; }

处理结果: (26,\(1,\(2,\(3,\(0,\(6,\(0,\(,d\(20,\(5,\(4,\

例2:源程序 main() {

int a,b; 6:a; b=a-1; }

处理结果: (26,\(1,\(2,\(3,\(21,”int”) (0,\(11,\(0,\(5,”;”) (30,\(100,\(0,\(5,”;”) (0,\(6,\(0,\(100,\

(30,\ (5,”;”) (4,\

七、参考代码

#include #define n 100 main() {

char a[n],t; int i,r=1,m=0; a[0]='\\n';

for(i=1;;i++) {

scanf(\

if(t!='#') {a[i]=t; r++;} else break; }

for(i=1;i

{ compare(a[i],a,&i,&m); }

if(m==1) {

clrscr();

printf(\ } getch(); }

int compare(char c,char a[],int *i,int *m) {

if(c=='(') printf(\ 1\\n\ else if(c==')') printf(\ 2\\n\ else if(c=='{') printf(\ 3\\n\ else if(c=='}') printf(\ 4\\n\ else if(c==';') printf(\ 5\\n\ else if(c=='=') printf(\ 6\\n\ else if(c=='+') printf(\ 7\\n\ else if(c=='*') printf(\ 8\\n\ else if(c=='>') printf(\ 9\\n\ else if(c=='<') printf(\ 10\\n\