我正在使用flex编写用于Verilog代码的扫描器。 我想写一个正则表达式,它接受除单词
以外的所有字符定义,ifdef,//,/ *。
我尝试了否定的前瞻性概念,但似乎flex不支持它。
例如:如果有字符串
assign a = b; **This should be scanned in the same expression**
assign a =b; //comment **Here line assign a=b should match the regex, but //comment should not match.**
答案 0 :(得分:0)
在flex中吞下这样的行是通过捕获符号然后不发出来完成的。如果您只想删除这些标记并传递其他所有内容,则可以使用规则排除具有更高优先级的标记来扫描这些标记,然后在末尾有一个匹配单个字符并发出它的规则。
要在flex中捕获一行注释,可以使用//.*\n
之类的东西,并且要采取的措施是不发出字符。
对于多行注释"/*".*"*/"
对于这些单词,您只需将它们包围在"#ifdef"
这样的qoutes中
在此处查看更多 http://people.cs.aau.dk/~marius/sw/flex/Flex-Regular-Expressions.html
编辑:您无需先删除注释之类的结构,它们是一种常规语言,因此可以用正则表达式来描述。