ANTLR:测试start和endtag中tagname的等价性

时间:2014-01-08 15:53:32

标签: xml grammar antlr3

使用ANTLR v3构建语法时遇到问题 使用antlrworks-1.5.2-complete。
我正在寻找表示XML元素的语法规则。 必须测试start-和endtag中标记名的等价性(良好格式)。

在文章Parsing XML中给出了问题的解决方案,
但我更喜欢一种更简单的方式,例如可以使用Perl(RecDescent)或yacc / bison。

使用Perl模块Parse :: RecDescent可以通过规则解决问题

element:  '<' name attributes '>' content '</' "$item[2]" '>'

$item[2]带有字符串,由符号名称(2.部分作品)找到。

ANTLR中是否存在$item[2]$2(yacc)这样简单的引用?

1 个答案:

答案 0 :(得分:1)

  

ANTLR中是否存在如$ item [2]或$ 2(yacc)这样简单的引用?

没有

在ANTLR中,人们在使用谓词行走(解析)树或语法时会验证这一点:

element
 : '<' open=NAME attributes '>' content '</' close=NAME '>'
   {$open.text.equals($close.text)}?
 ;

attributes
 : (NAME '=' STRING)+
 ;

content
 : ...
 ;

NAME
 : 'a'..'z'+ // not complete, of course!
 ;