如何将平衡括号定义为解析器规则而不是词法分析器规则

时间:2015-11-15 16:15:58

标签: antlr

所以我有以下语法:

BalancedBrace:
   : '{'  (~('{' | '}') | BalancedBraces)*  '}'
   ;

它可以很好地解析这样的文本:

$sect {
  some stuff
  { nested braces are fine }
}

但是现在我需要允许在文本中插入一些注释,并且在处理时应该忽略它:

$sect {
  some stuff  # starting from the # to the end of line is ignored

  another stuff
  /# starting from the /# till #/ is ignored
  #/
}

所以这意味着我需要将平衡括号从词法分析器规则更改为解析器规则,但我想知道什么是允许嵌套括号的正确解析器规则定义?

1 个答案:

答案 0 :(得分:0)

解析器中的解决方案与词法分析器规则中的解决方案非常相似:

sectionRule:
    '$sect' braceExpression
;

braceExpression:
    '{' braceContent '}'
;

bracContent:
    braceExpression
    | ... other content ...
;