结合不同的解析器规则以简化 ANTLR4 中 TreeListener 内的处理
Combining different parser rules to simplify processing within TreeListener in ANTLR4
这是我的语法文件的一部分:
paragraph
: TEXT? italic TEXT?
| TEXT? STAR TEXT?
| TEXT? labelRef TEXT?
| TEXT? BRACE_OPEN TEXT?
| TEXT? LABEL TEXT?
| ELEMENTPATH
| TEXT
;
段落规则应该 "mark" 我岛语法中的所有段落,因为我想在生成的段落元素周围生成 p 块。从技术上讲,可以识别所有不同的段落元素。
问题是,不同的规则导致我的侦听器中的不同段落调用。由于规则不同,这完全符合逻辑,但它使得在侦听器中处理树非常困难。同一段落的两个不同条目(作为示例)可以在图 1 中找到。
输入的文字是:
Text text paragraph 1 text *italic* text and here the same paragraph with a * but a different entry in the tree.
只有一个段落,但如果我处理树,输出 HTML 将包含两个段落。
有没有办法将这些不同的规则部分组合成一个段落调用?如果只是一个段落的意思,那么分析树中不应该有两个不同的段落。
您的 paragraph
规则设置为一次仅识别一个已定义的字符串。所以,你的第一段是 TEXT italic TEXT
,第二段是 STAR TEXT
.
尝试
paragraph
: ( TEXT? italic TEXT?
| TEXT? STAR TEXT?
| TEXT? labelRef TEXT?
| TEXT? BRACE_OPEN TEXT?
| TEXT? LABEL TEXT?
| ELEMENTPATH
| TEXT
)+
;
这是我的语法文件的一部分:
paragraph
: TEXT? italic TEXT?
| TEXT? STAR TEXT?
| TEXT? labelRef TEXT?
| TEXT? BRACE_OPEN TEXT?
| TEXT? LABEL TEXT?
| ELEMENTPATH
| TEXT
;
段落规则应该 "mark" 我岛语法中的所有段落,因为我想在生成的段落元素周围生成 p 块。从技术上讲,可以识别所有不同的段落元素。
问题是,不同的规则导致我的侦听器中的不同段落调用。由于规则不同,这完全符合逻辑,但它使得在侦听器中处理树非常困难。同一段落的两个不同条目(作为示例)可以在图 1 中找到。
输入的文字是:
Text text paragraph 1 text *italic* text and here the same paragraph with a * but a different entry in the tree.
只有一个段落,但如果我处理树,输出 HTML 将包含两个段落。
有没有办法将这些不同的规则部分组合成一个段落调用?如果只是一个段落的意思,那么分析树中不应该有两个不同的段落。
您的 paragraph
规则设置为一次仅识别一个已定义的字符串。所以,你的第一段是 TEXT italic TEXT
,第二段是 STAR TEXT
.
尝试
paragraph
: ( TEXT? italic TEXT?
| TEXT? STAR TEXT?
| TEXT? labelRef TEXT?
| TEXT? BRACE_OPEN TEXT?
| TEXT? LABEL TEXT?
| ELEMENTPATH
| TEXT
)+
;