首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANTLR4:树结构

ANTLR4:树结构
EN

Stack Overflow用户
提问于 2013-02-22 01:48:16
回答 1查看 2.1K关注 0票数 7

我正在扩展baseClass侦听器,并试图读入一些值,但是在顺序中似乎没有任何层次结构。

我的语法的精简版本如下:

代码语言:javascript
复制
start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;

KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;

然而,此实现的解析树在config_options级别(终端级别)是扁平的。i.e.the规则start有许多config_options的子节点,但EQUALS不是config_options的子树的根,所有令牌都将规则config_options作为根节点。如何才能使其中一个终端成为根节点?

在这个特定的规则中,我不希望捕获任何空格,我知道有->跳过了词法分析器,但是在某些情况下,我确实需要空格。即字符串'"'(ALPHANUM|‘')'"’

(注:^似乎不起作用)

输入的示例如下:

key=abcdefg

key=90weata

key=acbefg9

我要做的就是提取键和值对。我希望'=‘是根,两个子元素是键和值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 02:28:53

在生成语法时,在使用^运算符时会出现语法错误,该运算符在ANTLR4中已被删除。ANTLR4生成解析树,其根由语法中的规则隐式定义。换句话说,对于上面给出的语法,解析树节点将是startconfig_options

生成的config_options规则将返回一个Config_optionsContext实例,该实例包含以下方法:

  • KEY()为token.
  • EQUALS() token)
  • PATH() (与EQUALS token)
  • ALPHANUM()相同)返回PATH TerminalNode (与

相同)

您可以在TerminalNode上调用getSymbol()来获取Token实例。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15008936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档