【发布时间】:2011-10-18 14:43:58
【问题描述】:
我想在我的词法分析器中解析这样的内容:
( begin expression )
where 表达式也用方括号括起来。表达式中的内容并不重要,我只想将(begin 和匹配的) 之间的所有内容作为标记。一个例子是:
(begin
(define x (+ 1 2)))
所以令牌的文本应该是
(define x (+ 1 2)))
类似
PROGRAM : LPAREN BEGIN .* RPAREN;
(显然)不起作用,因为一旦他看到“)”,他就认为规则已经结束,但我需要匹配的括号。
我该怎么做?
【问题讨论】:
-
如果您想识别 (...) 之间的所有内容,包括其他嵌套 (...),那么您无法使用纯标准的基于正则表达式的词法分析器(例如 ANTLR,我认为),因为正则表达式无法计数-> 无法确定括号何时平衡。您需要实现一个可以计算括号的词位识别器。
标签: antlr matching lexer brackets