当前位置:文档之家› 编译原理实验--词法分析器

编译原理实验--词法分析器

编译原理实验--词法分析器
实验一词法分析器设计
【实验目的】
1(熟悉词法分析的基本原理,词法分析的过程以及词法分析中要注意的问题。

2(复习高级语言,进一步加强用高级语言来解决实际问题的能力。

3(通过完成词法分析程序,了解词法分析的过程。

【实验内容】
用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符
串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,
运算符,标识符,常数以及界符)输出。

【实验流程图】
【实验步骤】
1(提取pl/0文件中基本字的源代码
while((ch=fgetc(stream))!='.')
{
int k=-1;
char a[SIZE];
int s=0;
while(ch>='a' && ch<='z'||ch>='A' && ch<='Z') {
if(ch>='A' && ch<='Z') ch+=32;
a[++k]=(char)ch;
ch=fgetc(stream);
}
for(int m=0;m<=12&&k!=-1;m++)
for(int n=0;n<=k;n++)
{
if(a[n]==wsym[m][n]) ++s;
else s=0;
if(s==(strlen(wsym[m]))) {printf("%s\t",wsym[m]);m=14;n=k+1;} }
2(提取pl/0文件中标识符的源代码
while((ch=fgetc(stream))!='.')
{
int k=-1;
char a[SIZE]=" ";
int s=0;
while(ch>='a' && ch<='z'||ch>='A' && ch<='Z')
{
if(ch>='A' && ch<='Z') ch+=32;
a[++k]=(char)ch;
ch=fgetc(stream);
}
for(int m=0;m<=12&&k!=-1;m++)
for(int n=0;n<=k;n++)
{
if(a[n]==wsym[m][n]) ++s;
else s=0;
if(s==(strlen(wsym[m]))) {m=14;n=k+1;}
}
if(m==13) for(m=0;a[m]!=NULL;m++) printf("%c ",a[m]);
3(提取pl/0文件中常数的源代码
while((ch=fgetc(stream))!='.')
{
while(ch>='0' && ch<='9')
{
num=10*num+ch-'0';
ch=fgetc(stream);
}
if(num!=0) printf("%d ",num);
num=0;
}
4(提取pl/0文件中运算符的源代码
int ch=fgetc(stream);
while(ch!='.')
{
switch(ch)
{
case'+': printf("+ ");break;
case'-': printf("- ");break;
case'*': printf("* ");break;
case'/': printf("/ ");break;
case'>': if(fgetc(stream)=='=')printf(">= "); else printf("> ");break;
case'<': if(fgetc(stream)=='=')printf("<= "); else printf("< ");break;
case':': printf(":= ");break;
case'#': printf("# ");break;
case'=': printf("= ");break;
default: break;
}
ch=fgetc(stream);
5(提取pl/0文件中界符的源代码
int ch=fgetc(stream);
while(ch!='.')
{
switch(ch)
{
case',': printf(", ");break;
case';': printf("; ");break;
case'(': printf("( ");break;
case')': printf(") ");break;
default: break;
}
ch=fgetc(stream);
}
【实验结果】
1(pl/0文件(222.txt)内容
const a=10;
var b,c;
procedure p;
begin
c:=b+a;
end;
begin
read(b);
while b#0 do
begin
call p;write(2*c);read(b)
end
end .
2(实验运行结果
【实验小结】
1.了解程序在运行过程中对词法分析,识别一个个字符并组合成相应的单词,是机器能过明
白程序,定义各种关键字,界符。

2.词法分析是运行一个程序的开端,在编译原理这门课中加深了对机器内部程序是如何运行
,也加强自己上机动手能力。

相关主题