Common Lisp lexer生成器,允许状态变量

时间:2015-09-10 02:59:00

标签: parsing common-lisp yacc lex sbcl

通常引用的两个主要词法分析器,cl-lex和lispbuilder-lexer都没有允许"动作块"中的状态变量,从而无法识别c风格的多行注释,例如。

Common Lisp中的词法分析器是什么,可以将c风格的多行注释识别为令牌?

更正:此词法分析器实际上需要识别嵌套的,平衡的多行注释(不完全是C风格)。所以我不能废除状态变量。

1 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式识别C风格的多行注释:

[/][*][^*]*[*]+([^*/][^*]*[*]+)*[/]

它应该适用于任何使用Posix兼容的扩展正则表达式语法的库;虽然有点难以阅读,因为*被广泛用作运算符和文字字符,但它不使用非常规功能。它依赖于匹配换行符的倒置字符类(例如[^*]),但非常普遍,即使对于通配符与换行符不匹配的正则表达式引擎也是如此。