添加一些规则来解析XML,但是当我尝试编译项目时它不起作用。我有下一个错误: 错误 2 未知属性引用"closeTag"在"$closeTag.text"D:\DevExpress\ControlEvaluation\RichEditControl\WindowsFormsRichEdit\WindowsFormsRichEdit\XMLParser.g4 40 29 WindowsFormsRichEdit 错误 1 未知属性引用 'openTag' in '$openTag.text' D:\DevExpress\ControlEvaluation\RichEditControl\WindowsFormsRichEdit\WindowsFormsRichEdit\XMLParser.g4 40 8 WindowsFormsRichEdit
element : '<' openTag=Name attribute* '>' content '<' '/' closeTag=Name '>'
| {$openTag.text.equals($closeTag.text)}?
| '<' Name attribute* '/>'
;
closeTag
在第一个备选方案中定义,但在第二个备选方案中引用它。它在那里不存在。
不要在解析器中进行语义检查。打开和关闭标记名称的相等是一种语义强制。相反,在没有要在此处实现的约束的情况下解析输入,并在获得解析树后运行语义阶段。这也将允许您打印更好的错误消息(例如,"打开和关闭标签必须相同",而不是"没有可行的alt")。
对于此语义检查,请使用生成的解析树侦听器(或者更确切地说,是该类的派生)。