【发布时间】:2015-07-19 13:31:35
【问题描述】:
我有一个小语法,其中包含一些必须与 Numbers 一起使用的命令,其中一些命令也返回 Numbers。
我的语法 sn-p 是这样的:
Command:
name Numbers
| Numbers "test"
;
name:
"abs"
| "acos"
;
Numbers:
NUMBER
| numberReturn
;
numberReturn:
name Numbers
;
terminal NUMBER:
('0'..'9')+("."("0".."9")+)?
;
在规则命令中插入“数字'测试'”部分后,编译器抱怨非 LL() 决策并告诉我必须解决这些问题(左分解、句法谓词、回溯)但是我的问题是我不知道在这种情况下哪种输入不是非 LL() 也不知道如何左因子我的语法(我不想打开回溯)。
编辑:
这个语法应该匹配的几个例子:
abs 3;
acos abs 4; //interpreted as "acos (abs 4)"
acos 3 test; //(acos 3) test
最好的问候
乌鸦
【问题讨论】:
-
我不知道您正在使用的解析器生成器,但在我看来,任何以
name开头的东西都会模棱两可,因为您可以使用name作为起始符号Command->name Numbers... 或Command->Numbers "test"->Numbers: numberReturn->numberReturn: name...。 -
是的,就是这样......现在我也看到了。现在的问题是如何解决这种歧义。不过还是谢谢
-
你看过文档了吗?我认为它很好地涵盖了它:eclipse.org/Xtext/documentation/301_grammarlanguage.html 搜索“Assigned Actions”和“Syntactic Predicates”
-
我确实试图猜测您要做什么,但我需要有关您的问题的更多详细信息。在你的 DSL 中可能有什么样的陈述?请添加一些示例,以便我找出可能的语法。
-
添加了一些示例...希望它们足够有用
标签: xtext