我扩展了baseClass Listener并尝试读取一些值,但似乎没有层次结构的顺序。
以下是我语法简化后的版本:
然而,此实现的解析树在config_options级别(终端级别)是扁平的,即规则start有许多config_options的子节点,但EQUALS不是config_options子树的根节点,所有TOKENS都将规则config_options作为根节点。我怎样才能使一个终端成为根节点呢?
在这个特定的规则中,我不希望任何空格被捕获,我知道对于词法分析器,有"->skip"指令,但是有些情况下我确实想要保留空格,例如在字符串'"'( ALPHANUM | ' ') '"'中。
(注意:^似乎无效)
输入示例:
key=abcdefg
key=90weata
key=acbefg9
我只想提取键和值对。我期望'='是根节点,而两个子节点则分别为键和值。
以下是我语法简化后的版本:
start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;
KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;
然而,此实现的解析树在config_options级别(终端级别)是扁平的,即规则start有许多config_options的子节点,但EQUALS不是config_options子树的根节点,所有TOKENS都将规则config_options作为根节点。我怎样才能使一个终端成为根节点呢?
在这个特定的规则中,我不希望任何空格被捕获,我知道对于词法分析器,有"->skip"指令,但是有些情况下我确实想要保留空格,例如在字符串'"'( ALPHANUM | ' ') '"'中。
(注意:^似乎无效)
输入示例:
key=abcdefg
key=90weata
key=acbefg9
我只想提取键和值对。我期望'='是根节点,而两个子节点则分别为键和值。
value : config_options: KEY EQUALS value ; (PATH | ALPHANUM) (' '|'\r'|'\n')* ;
- Bart Kiers