我正在扩展baseClass Listener,并试图读取一些值,但似乎没有顺序中的任何层次结构。ANTLR4:树构建
一个砍下我的语法的版本如下:
start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;
KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;
但是这种实现的解析树平在config_options水平(终端层面)iethe规则的开始具有config_options的很多孩子,但EQUALS不是config_options的子树的根,所有的TOKENS都有规则config_options作为根节点。我怎样才能让其中一个终端成为根节点呢?
在这个特定的规则中,我不希望任何空格被捕获,我知道有 - > skip指示词法分析器,但有些情况下我确实需要空间。即字符串 '“(ALPHANUM |' ')''
(注:^似乎不工作)
一个例子输入:
键= ABCDEFG
键= 90weata
键= acbefg9
所有我想要做的就是提取键和值对。我期望'='是根,两个孩子将是关键和价值。
您将如何定义终端之间的关系?即得到等号的孩子。或者这在ANTLR4中不是一个有效的想法? 有没有办法创建一个AST而不是一个分析树? – Har 2013-02-22 09:42:54
@ user1932405,创建一个额外的规则,例如'value':'config_options:KEY EQUALS value;值:(PATH | ALPHANUM)('''''''''''n')*;' – 2013-02-22 11:04:49
噢好吧,谢谢你,所以我不得不根据分析规则创建AST而不是令牌。 – Har 2013-02-22 15:11:25