首页 > 编程知识 正文

c语言程序的基本结构,c语言词法分析器的简单实现

时间:2023-05-04 12:09:40 阅读:156381 作者:4959

? C语言词法分析器的设计与实现

C语言词法分析器的设计与实现

一.实验目的

1 .加强对系统软件综合工程实现能力、规划能力的培训;

2 .加强对词法分析原理、方法和基本实现技术的理解;

2 .实验内容

完成c语言(或c )作为宿主语言:

? 其中的具体要求:

1 .使用DFA实现词法分析器的设计

2 .实现c源程序中注释的过滤

3 .利用半环缓冲器从文件中一个接一个地读取单词;

4 .词法分析结果的属性字流存储在独立的文件中;

5 .统计源程序各行的单词数和整个源文件的单词数;

6 .具有报告词法错误和错误位置(源程序行号及其行文字)的功能;

7 .将属性字流输出到屏幕,每次显示10行,按ESC键可中途退出。 每行都有统计信息,最后是词法分析的所有信息。 也包括各属性单词的个数。

3 .实验检验和评分要求

? 1 .编写C语言词法分析器源程序并通过调试

2 .根据测试程序进行验收(测试程序名称: Test-Lexcial );

? 3 .提交简明扼要的书面实验报告。 内容为FA设计; 源程序的主要函数功能; 主要数据结构设计。

四.检验测试案例

1 .测试用例1 :统一检验测试用例

#包含

#包含

char buf[100],str[15];

int countdef=0;

FILE *fpmiddle;

结构定义

{

char with[30];

char des[30];

char filename[15];

}def[30];

char* getFileName () )

{

int i=0,k=0;

for(I=0; buf[i]!='

I;

wile(buf[I]!=''i30buf[i]!=' ' )

str[k ]=buf[i ];

str[k]=' ';

puts(str;

return str;

}

长读(file * FPT )。

{

if(fgets(buf,100,fpt )==NULL ) ) )。

{

puts(buf;

打印(readlineerrorreachfileend )! n ';

返回0;

}

puts(buf;

return(long ) strlen (buf ) 1;

}

void writeline () )

{

frintf(FPmiddle,' %s ',buf );

}

voidprocessdefine (char * filename ) )。

{

int i=8,j=0;

while (def [ count def ].des [ I-8 ]=buf [ I ]!=' ' ) I;

def[countdef].des[i-8]=' ';

while (def [ count def ].with [ j ]=buf [ I ]!=' ' )

{

I;

j;

}

def[countdef].with[j-1]=' ';

strcpy(def[countdef].filename,filename;

countdef;

}

长注释(文件* FPT ) )。

{

char prechar=buf[0],ch='* ';

int i=0,j=0;

for(I=0; buf[i]!=' '! (buf[i]=='/'buf[i 1]=='* ' ); I;

j=i;

buf[i]=' ';

if(I==strlen(buf ) ) return 0L;

do

{

prechar=ch;

if () ch=fgetc(FPT ) )==EOF ) ) ) )。

{

打印(in comment,end );

退出(0;

}

I;

}while (! (prechar=='*'ch=='/' );

return(long ) ) i-j 1;

}

是isin(char*p )

{

int i=0,j=0,temp=0;

wile (时间!=strlen(buf ) )

{

wile(buf[I]!=''buf[i]!=p[0] )

I;

temp=i;

while(buf[I]==p[j]p[j]!=''buf[i]!=' ' )

{

I;

j;

}

if(I-temp )==strlen(p ) )返回temp;

i=te

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。