允许状态变量的 Common Lisp 词法分析器生成器

Common Lisp lexer generator that allows state variables

cl-lex 和 lispbuilder-lexer 这两个通常引用的主要词法分析器生成器都不允许 "action blocks" 中的状态变量,因此无法识别 c 风格的多行注释,例如.

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

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

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

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

它应该可以与任何使用 Posix 兼容的扩展正则表达式语法的库一起使用;尽管因为 * 被广泛用作运算符和文字字符而有点难以阅读,但它没有使用非常规特征。它确实依赖倒置字符 类(例如 [^*])匹配换行符,但 afaik 非常通用,即使对于通配符不匹配换行符的正则表达式引擎也是如此。