第一范文网 - 专业文章范例文档资料分享平台

编译原理实验一词法分析实验报告

来源:用户分享 时间:2025/10/25 22:35:29 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

专题 1_ 词法分析程序构造原理与实现

李若森 13281132计科1301

一、 程序功能描述

[功能]:

完成下述正则文法所描述的C语言子集单词符号的词法分析程序。 [要求]: (1) 给出各单词符号的类别编码。 (2) 能发现输入串的错误。 (3) 将分析所得二元序列输出到中间文件中。 [文法]:

<标识符>→c|c<余留标识符> <余留标识符>→d|c

<无符号数>→d<余留无符号数>|.<小数部分>|d

<余留无符号数>→d<余留无符号数>|.<十进小数>|(E|e)<指数部分>|.|d <十进小数>→(E|e)<指数部分>|d<十进小数>|d <小数部分>→d<十进小数>|d

<指数部分>→d<余留指数>|(+|-)<整指数>|d <整指数>→d<余留整指数>|d <余留整指数>→d<余留整指数>|d <算数运算符>→+|-|*|/|++|-- <关系运算符>→>|<|==|>=|<=|!= <逻辑运算符>→!|&&|\\|\\| <位操作运算符>→>>|<<

<赋值运算符>→=|+=|-=|*=|/=|%= <特殊运算符>→,|\\(|\\)|{|} <分隔符>→;

保留字: void int float double if else for do while [说明]: (1) 该语言对大小写不敏感 (2) c代表字母a-z&&A-Z,d代表数字0-9。 (3) ?/*..*/?以及?//?为程序注释部分。 (4) 文法中‘\\’为转义字符

二、 主要数据结构描述

pair:

用pair来存储单个二元组。其中第一个元素为类型号,第二个为

元素的值。当类型号小于40时代表程序分界符,第二个元素不存储有效信息,用?-?代替;类型号为40时是标识符,第二个元素存储标识符字符串;类型号为41时代表实数,第二个元素存储的是该实数的二进制值。 vector<>:

vector是C++中的动态数组,用来存储每一行的二元组。

三、 程序结构描述

设计方法:

状态转换图:(DFA M)

0* = / % !12345=>> =<< =15&&||Character6, ) { } ;Character, Digit+789.+ =-- =E eDigitE eDigit1011+ -12Digit13.DigitDigitDigit14Digit

本实验将标识符分为以下几类

1. 算术运算符

+、-、*、/、%、++、-- 2. 关系运算符

>、<、==、>=、<=、!= 3. 逻辑运算符 !、&&、|| 4. 位操作运算符 <<、>> 5. 赋值运算符

=、+=、-=、*=、/=、%= 6. 特殊运算符 ,、(、)、{、} 7. 分隔符

;、/*、*/、// 8. 实数 9. 标识符 10. 保留字

void、int、float、double、if、else、for、do、while

需要识别的关键字及识别码

关键字 + - * / % ++ -- > < == >= <= != ! 识别码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 关键字 && || << >> = += -= *= /= %= , ( ) { 识别码 15 16 17 18 19 20 21 22 23 24 25 26 27 28 关键字 } ; void int float double if else for do while 标识符 正实数 识别码 29 30 31 32 33 34 35 36 37 38 39 40 41 函数定义:

getOutputName:

void getOutputName( char *inputName, char *outputName );

功能:

得到输出文件名 传入参数:

inputname:需处理的文件的文件名 传出参数:

Outputname:输出文件的文件名 返回值: (无)

errMsg:

void errMsg( string filename, int rowNo, int colNo, string errmsg ); 功能:

向屏幕输出错误信息 传入参数:

filename:正在处理的文件的文件名称 rowNo:出错行 colNo:出错列 errmsg:错误信息 传出参数: (无) 返回值: (无)

noteProcess:

bool noteProcess( string &str, bool ¬eflag ); 功能:

预处理,删除字符串内注释 传入参数:

str:需处理的字符串

Noteflag:该字符串是否处于多行注释中 传出参数:

str:处理过的字符串

noteflag:当前行是否处于多行注释中 返回值:

是否成功处理。如果注释匹配则返回true,否则返回false。

print:

void print( FILE *fp, vector vTable ); 功能:

将结果输出到文件中

搜索更多关于: 编译原理实验一词法分析实验报告 的文档
编译原理实验一词法分析实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c38tox4es7g1symv1jox557eja0pqkz006jx_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top