当前位置: 首页 > news >正文

2024年秋词法分析作业(满分25分)

【问题描述】

请根据给定的文法设计并实现词法分析程序,从源程序中识别出单词,记录其单词类别和单词值,输入输出及处理要求如下:

   (1)数据结构和与语法分析程序的接口请自行定义;类别码需按下表格式统一定义;

   (2)你的词法分析程序需要将注释去掉,注释有两种:单行注释和多行注释,风格与C语言相同。

   (3)Ident为标识符,以字母或下划线开头,由字母、下划线、数字组成的串

   (4)IntConst为整型常量,仅包含10进制无符号整数

   (5)FormatString是用于printf中的格式化字符串,特殊字符仅包含%d和\n,例如"m=%d\n"

   (6)为了方便进行自动评测,输入的被编译源文件统一命名为 testfile.txt(注意不要写错文件名);输出的结果文件统一命名为 output.txt(注意不要写错文件名),结果文件中每行按如下方式组织:

                单词类别码 单词的字符/字符串形式(中间仅用一个空格间隔)

                单词的类别码请统一按如下形式定义:

词法分析类别码定义如下:

单词名称类别码单词名称类别码单词名称类别码单词名称类别码
IdentIDENFR!NOT*MULT=ASSIGN
IntConstINTCON&&AND/DIV;SEMICN
FormatStringSTRCON||OR%MOD,COMMA
mainMAINTKwhileWHILETK<LSS(LPARENT
constCONSTTKgetintGETINTTK<=LEQ)RPARENT
intINTTKprintfPRINTFTK>GRE[LBRACK
breakBREAKTKreturnRETURNTK>=GEQ]RBRACK
continueCONTINUETK+PLUS==EQL{LBRACE
ifIFTK-MINU!=NEQ}RBRACE
elseELSETKvoidVOIDTK

【输入形式】testfile.txt中的符合文法要求的测试程序。
【输出形式】要求将词法分析结果输出至output.txt中。

【特别提醒】  (1)读取的字符串要原样保留着便于输出,特别是数字,这里输出的并不是真正的单词值,其实是读入的字符串,单词值需另行记录。

(2)本次作业只考核对正确程序的处理,但需要为今后可能出现的错误情况预留接口。

(3)在今后的错误处理作业中,需要输出错误的行号,在词法分析的时候注意记录该信息。

(4)单词的类别和单词值以及其他关注的信息,在词法分析阶段获取后,后续的分析阶段会使用,请注意记录;当前要求的输出只是为了便于评测,完成编译器中无需出现这些信息,请设计为方便打开/关闭这些输出的方案。

【样例输入】

int main(){int c;c = getint();printf("output is %d",c);return c;
}

【样例输出】

CONSTTK const
INTTK int
IDENFR array
LBRACK [
INTCON 2
RBRACK ]
ASSIGN =
LBRACE {
INTCON 1
COMMA ,
INTCON 2
RBRACE }
SEMICN ;
INTTK int
MAINTK main
LPARENT (
RPARENT )
LBRACE {
INTTK int
IDENFR c
SEMICN ;
IDENFR c
ASSIGN =
GETINTTK getint
LPARENT (
RPARENT )
SEMICN ;
PRINTFTK printf
LPARENT (
STRCON "output is %d"
COMMA ,
IDENFR c
RPARENT )
SEMICN ;
RETURNTK return
IDENFR c
SEMICN ;
RBRACE }

【评分标准】 按与预期结果不一致的项数(每一行单词信息算一项)扣分,每项扣5%。

【参考代码】参考代码仅能识别整型常量,你可以在此基础上扩充。

src.rar

【文档要求】完成词法分析阶段设计文档  

【提交形式】将所开发的词法分析程序的源文件(.cpp/.c/.h/.java,不含工程文件)打包为zip或rar后提交。对于使用 java 开发的编译器,程序运行的入口为 src 目录下 Compiler.java 中的 main 方法。上传请直接打包 src 文件夹,如果引用了第三方外部包(推荐),请将外部 jar 包文件放到 bin 目录下,bin 和 src 两个文件夹同级,将 bin 和 src 一起打包后提交即可。

评测机所采用的编译学生代码的版本是:C/C++ gcc/g++ 8.1.0,Java jdk 1.8

(注意在MAC下压缩会产生额外的文件到压缩包中,需删掉额外文件后提交)。

答案:

Mag1skY/Compiler-Principles: 词法分析 语法分析 中间代码生成 代码生成

http://www.lryc.cn/news/512575.html

相关文章:

  • Docker镜像瘦身:从1.43G到22.4MB
  • 前端加解密对抗encrypt-labs
  • Android Notification 问题:Invalid notification (no valid small icon)
  • Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • ES中查询中参数的解析
  • 学习笔记:使用 pandas 和 Seaborn 绘制柱状图
  • 【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
  • 后端开发-Maven
  • 自动化办公-合并多个excel
  • mavlink移植到单片机stm32f103c8t6,实现接收和发送数据
  • 小程序基础 —— 08 文件和目录结构
  • FIR数字滤波器设计——窗函数设计法——滤波器的时域截断
  • MySQLOCP考试过了,题库很稳,经验分享。
  • WPF 绘制过顶点的圆滑曲线 (样条,贝塞尔)
  • Kafka 幂等性与事务
  • day2 Linux操作系统指令
  • AI一周重要会议和活动概览
  • 重启ubuntu服务器,如何让springboot服务自动运行
  • python系列教程237——启动扩展功能
  • U盘格式化工具合集:6个免费的U盘格式化工具
  • 循环神经网络(RNN)入门指南:从原理到实践
  • 马原复习笔记
  • Android Room 框架的初步使用
  • 什么是过度拟合和欠拟合?
  • DotnetSpider实现网络爬虫
  • 锐捷WLAN产品出货量排名第一!
  • win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例
  • 自动化文档处理:Azure AI Document Intelligence
  • 【Maven】Maven打包机制详解