通常引用的两个主要词法分析器,cl-lex和lispbuilder-lexer都没有允许"动作块"中的状态变量,从而无法识别c风格的多行注释,例如。
Common Lisp中的词法分析器是什么,可以将c风格的多行注释识别为令牌?
更正:此词法分析器实际上需要识别嵌套的,平衡的多行注释(不完全是C风格)。所以我不能废除状态变量。
答案 0 :(得分:2)
您可以使用以下正则表达式识别C风格的多行注释:
[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/]
它应该适用于任何使用Posix兼容的扩展正则表达式语法的库;虽然有点难以阅读,因为*
被广泛用作运算符和文字字符,但它不使用非常规功能。它依赖于匹配换行符的倒置字符类(例如[^*]
),但非常普遍,即使对于通配符与换行符不匹配的正则表达式引擎也是如此。