【发布时间】:2012-12-03 13:55:28
【问题描述】:
我有一个包含简单令牌列表的 AST...
我只是想将成对的平衡参数分组到嵌套树中。
我一直在尝试各种规则,但我无法完全理解......
bottomup : findParams;
findParams
: ^(LIST left+=expression* LPARAM inner? RPARAM right+=expression*)
-> ^(LIST $left* ^(PARAMS inner?) $right*);
inner : (left+=expression* LPARAM inner? RPARAM right+=expression*)
-> $left* ^(PARAMS inner?) $right*) | (a+=expression* -> $a*);
fragment expression = INT;
这有点像 dyck 语言,但在树上而不是在源上。另外,我无法使用远程调试来调试模式匹配树语法,这是一个障碍。
【问题讨论】:
-
对不起,我刚刚发布了一个答案,然后明白了,它可能不是你需要的。请更详细地解释一下,你是什么意思:“......但是在树上而不是在源头上”。这是否意味着您只能使用某些树列表,而不能使用输入文本(字符串)?
-
嗨,是的,我正在使用解析器生成的 AST,我想使用树语法来操作它以嵌套参数。上面的例子是一个可能的树的超级简单版本。我的实际语法要复杂得多,没有像 INT 甚至 LPARAM/RPARAM 这样简单的东西。尽管如此,这仍然是同样的问题。我想在解析器阶段这样做是可能的,而且要好得多,但是在树语法阶段要简单得多。
-
好的。可能这是一个愚蠢的建议,但是......如果我试图解决这个问题,我会将输入的 AST 转换为简单的字符串,然后使用我自己的语法以方便的形式对其进行解析:)
标签: parsing tree antlr grammar abstract-syntax-tree