编译原理DFA化简实验报告C语言,【编译|编译原理词法分析器实验报告】原理|词法|分析器|实验|报告-傻大方...

本文档是一份关于编译原理的词法分析器实验报告,详细描述了如何根据状态转换图直接编程实现词法分析程序,该程序能够扫描源程序,识别单词并输出二元式流文件。实验内容包括组织输入、单词识别、错误处理(如非法字符和未结束的注释)以及建立标识符和常量表。程序设计包括输入源程序文件、判断字符类型和处理注释等功能,并能报告错误信息。
摘要由CSDN通过智能技术生成

『易坊知识库摘要_编译|编译原理词法分析器实验报告』二、实验内容及要求1根据状态转换图直接编程编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,...

按关键词阅读:

原理

编译

报告

实验

分析器

词法

1、北华航天工业学院编译原理课程实验报告课程实验题目: 词法分析器实验 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: B08512 作 者 学 号: 18 作 者 姓 名 : 李桂丁 指导教师姓名: 李建义 完 成 时 间 : 2010年3月26日 一、实验目的了解词法分析程序的两种设计方法:1.根据状态转换图直接编程的方式;2.利用DFA编写通用的词法分析程序 。

二、实验内容及要求1根据状态转换图直接编程编写一个词法分析程序 , 它从左到右逐个字符的对源程序进行扫描 , 产生一个个的单词的二元式 , 形成二元式(记号)流文件输出 。

在此 , 词法分析程序作为单独的一遍 , 如下图 。

2、所示 。

具体任务有:(1)组织源程序的输入(2)拼出单词并查找其类别编号 , 形成二元式输出 , 得到单词流文件(3)删除注释、空格和无用符号(4)发现并定位词法错误 , 需要输出错误的位置在源程序中的第几行 。

将错误信息输出到屏幕上 。

(5)对于普通标识符和常量 , 分别建立标识符表和常量表(使用线性表存储) , 当遇到一个标识符或常量时 , 查找标识符表或常量表 , 若存在 , 则返回位置 , 否则返回0并且填写符号表或常量表 。

标识符表结构:变量名 , 类型(整型、实型、字符型) , 分配的数据区地址注:词法分析阶段只填写变量名 , 其它部分在语法分析、语义分析、代码生成等阶段逐步填入 。

常量表结构:常量名 , 常量值2能对任何S语言源程序进行分析 。

3、在运行词法分析程序时 , 应该用问答形式输入要被分析的S源语言程序的文件名 , 然后对该程序完成词法分析任务 。

3能检查并处理某些词法分析错误词法分析程序能给出的错误信息包括:总的出错个数 , 每个错误所在的行号 , 错误的编号及错误信息 。

4.本实验要求处理以下两种错误(编号分别为1 , 2):1:非法字符:单词表中不存在的字符处理为非法字符 , 处理方式是删除该字符 , 给出错误信息 , “某某字符非法” 。

2:源程序文件结束而注释未结束 。

注释格式为:/* */三、实验程序设计说明1实验方案设计2程序源代码#include#include#include#includeusing namespace std;

string ke 。

4、ywords20=include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return;

char aa99999= ;

string id10000;

int pp=0;

string nu10000;

int qq=0;

void initscanner() /程序初始化:输入并打开源程序文件和目标程序文件 , 初始化保留字表int i=0;

FILE *fp;

if(fp=fopen(a.txt,r)=NULL)printf(Open error!);

exi 。

5、t(0);

char ch=fgetc(fp);

while(ch!=EOF)aai=ch;

i+;

ch=fgetc(fp);

fclose(fp);

int decide1(char a) /判断是否是字母if(a=a&a=A&a=0&a: st+;

if(aast=)st+;

printf( (rlop,=) );

else printf( (rlop,) );

break;

case : st+;

if(aast=) st+;

printf( (rlop,=) );

else printf( (rlop,) );

break;

case %: st+;

if(aast=)st+;

printf( (%=,-) );

els 。

6、e printf( (%,-) );

break;

case !: st+;

if(aast=)st+;

printf( (!=,-) );

else printf( (!,wrong thing!) );

break;

case &: st+;

if(aast=&)st+;

printf( (&,-) );

else printf( (&,worng word!) );

break;

case |: st+;

if(aast=|)st+;

printf( (|,-) );

else printf( (|,worng word!) );

break;

case : st+;

printf( (,-) );

break;

case : 。

7、 st+;

printf( (,-) );

break;

case (: st+;

printf( (,-) );

break;

case ): st+;

printf( (),-) );

break;

case : st+;

printf( (,-) );

break;

case : st+;

printf( (,-) );

break;

case : st+;

printf( (:,-) );

break;

case #: st+;

printf( (#,-) );

break;

case ;

: st+;

printf( (;

,-) );

break;

case .: st+;

printf( (.,-) );

break;

case ,:。

8、st+;

printf( (,-) );

break;

case : st+;

break;

case : st+;

break;

case 10: st+;

printf(n);

break;

case 34: st+;

printf( (,-) );

break;

case 39: st+;

printf( (,-) );

break;

default: printf( (%c,worng thing) ,aast);

st+;

return st;

int lexscan(int st) /根据读入的单词的第一个字符确定调用不同的单词识别函数if(decide1(aast)=1)st=isalpha(st);

else if( 。

9、decide2(aast)=1)st=isnumber(st);

else if(aast=/)st=isanotation(st);

else st=isother(st);

return st;

void scanner() /若文件未结束 , 反复调用lexscan函数识别单词int i=0;

来源:(未知)

【傻大方】网址:http://www.shadafang.com/a/2020/1223/002661775.html

标题:编译|编译原理词法分析器实验报告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值