如何编写不区分大小写的Lex模式规则?

Ank*_*tam 1 yacc lex verilog vhdl flex-lexer

我的文件结构是,

`pragma TOKEN1_NAME TOKEN1_VALUE
`pragma TOKEN2_NAME TOKEN2_VALUE
`pragma TOKEN3_NAME TOKEN3_VALUE
`pragma TOKEN4_NAME TOKEN4_VALUE
 TEXT{

 // A valid VHDL or verilog
 }
`pragma TOKEN2_NAME TOKEN2_VALUE
 TEXT{

   // VHDL or verilog
 }
Run Code Online (Sandbox Code Playgroud)

因为我正在处理Verilog和VHDL.我需要重新构建我的令牌名称,记住VHDL不区分大小写.我想对这两种情况使用单一解析器.同样的最有效方法是什么?flex是否支持某种功能以允许不区分大小写的模式匹配,如果文件的格式是Verilog,我们以后可以检查是否清除了令牌名称(包含所有小写字母)?

ric*_*ici 5

Flex使用以下语法支持模式中的大小写不敏感:

(?i:...)
Run Code Online (Sandbox Code Playgroud)

扫描:)扫描之间的图案而不考虑大小写.

这并意味着输入"净化",变成小写,或以任何方式修改.如果你想这样做,那是你的责任.一切都意味着(例如):

(?i:KeyWord)
Run Code Online (Sandbox Code Playgroud)

将匹配任何输入KEYWORD,keyword,kEywOrd等.

如果你有一个古老的flex版本(早于2007年底发布的2.5.34版本)并且出于某种原因你不想升级,你需要习惯于编写这样的模式:

[Kk][Ee][Yy][Ww][Oo][Rr][Dd]
Run Code Online (Sandbox Code Playgroud)

您仍将在旧版扫描仪定义文件中找到示例.