内容发布更新时间 : 2025/10/31 18:14:02星期一 下面是文章的全部内容请认真阅读。
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\