不匹配某些字符串的正则表达式

时间:2018-07-03 11:59:39

标签: regex compiler-construction flex-lexer lex

我正在使用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.**

1 个答案:

答案 0 :(得分:0)

在flex中吞下这样的行是通过捕获符号然后不发出来完成的。如果您只想删除这些标记并传递其他所有内容,则可以使用规则排除具有更高优先级的标记来扫描这些标记,然后在末尾有一个匹配单个字符并发出它的规则。

要在flex中捕获一行注释,可以使用//.*\n之类的东西,并且要采取的措施是不发出字符。

对于多行注释"/*".*"*/"

对于这些单词,您只需将它们包围在"#ifdef"这样的qoutes中

在此处查看更多 http://people.cs.aau.dk/~marius/sw/flex/Flex-Regular-Expressions.html

编辑:您无需先删除注释之类的结构,它们是一种常规语言,因此可以用正则表达式来描述。