实验三:借助Flex熟悉SysY词法分析

本文详细介绍了如何使用Flex进行词法分析,包括TOKEN类型定义、正则表达式规则、数值识别、注释处理、错误处理和算法流程,以及如何在C++编译器中实现。
摘要由CSDN通过智能技术生成

flex基本使用

规则

声明部分
%%
规则部分
%%
代码(user code)

基本操作

flex test.l
gcc lex.yy.c -o lex
./lex in.txt out.txt

具体实现

1.设计方案
(1)Token 类型定义:
枚举 TOKEN 定义了各种可能的词法单元类型,例如类型(TYPE)、关键字(KEYWORD)、比较运算符(COMPARISON)、运算符(OPERATOR)、标识符(ID)、常量(CONST)等。
(2)正则表达式规则:
使用正则表达式定义了各种词法单元的模式,例如:
TYPE 匹配 “int”、“void” 或 “float”。
KEYWORD 匹配诸如 “if”、“else”、“while” 等关键字。
ID(标识符)匹配以字母或下划线开头,后跟任意数量的字母、数字或下划线的字符串。
(3)特殊数值的识别:
为八进制常量、十六进制常量和浮点数定义了模式,并处理了非法八进制和十六进制常量的情况。
(4)注释的忽略:
定义了两种注释模式(NOTE1 和 NOTE2),词法分析器在识别到它们时会忽略。
(5)错误处理:
对于不符合任何已定义模式的字符,词法分析器将其视为错误,并输出相应的错误信息。
2.算法描述
(1)输入处理:
词法分析器从文件中读取输入,支持处理多个文件。
(2)模式匹配:
对于每个读入的字符或字符序列,词法分析器尝试匹配预定义的正则表达式。
当找到匹配时,执行相应的动作,如打印 token 类型和值。
(3)数值转换和输出:
对于八进制和十六进制常量,执行字符串到数值的转换,并打印转换后的值。
对于标识符、关键字、运算符等,直接打印其类型和文本。
(4)错误处理:
当输入不符合任何已定义模式时,输出错误信息,并指明错误位置。
(5)文件处理:
支持从命令行参数指定的文件读取输入,并将输出重定向到指定的文件或标准输出。

参考资料

https://blog.csdn.net/weixin_52435933/article/details/128291286
flex教程
https://blog.csdn.net/weixin_44007632/article/details/108666375

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值