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,我们以后可以检查是否清除了令牌名称(包含所有小写字母)?
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)
您仍将在旧版扫描仪定义文件中找到示例.