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