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
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\