我的文件结构是,
`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
}
因为我正在处理Verilog和VHDL。我需要重新构建我的令牌名称,记住VHDL不区分大小写。 我想对这两种情况使用单一解析器。同样的最有效方法是什么? flex是否支持某种功能以允许不区分大小写的模式匹配,如果文件的格式是Verilog,我们以后可以检查是否清除了令牌名称(包含所有小写字母)?
答案 0 :(得分:5)
Flex使用以下语法支持模式中的不区分大小写:
(?i:...)
:和)之间的模式将被扫描而不考虑大小写。
这不暗示输入已被清理",变成小写,或以任何方式修改。如果你想这样做,那是你的责任。它意味着(例如):
(?i:KeyWord)
将匹配任何输入KEYWORD
,keyword
,kEywOrd
等。
如果你有一个古老的flex版本(早于2.5.34,在2007年底发布)并且由于某种原因你不想升级,你需要习惯于编写模式像这样:
[Kk][Ee][Yy][Ww][Oo][Rr][Dd]
您仍会在较旧的扫描仪定义文件中找到示例。