XTEXT:用作参数时避免语法匹配

时间:2015-07-10 13:03:17

标签: parsing xtext

我还是Xtext的新手,所以我很抱歉这是一个简单的问题。

我有自定义脚本语言,我试图仅使用XTEXT进行语法检查。该语言每行有一个命令,格式为:

COMMAND:PARAMETERS

当命令的参数也是命令关键字时,我遇到了问题。语法文件的相关部分:

Model:
    (commands += AbstractCommand)*
;

AbstractCommand:
    Command1 | Command2
;

Command1:
    command = 'command1' ':' value = Parameter
;

Command2:
    command = 'command2' ':' value = Parameter
;

Parameter:
    value = QualifiedParameter 
;

QualifiedParameter:
    (ID |  ' ' | INT | '.' | '-' )+
;

当其中一个命令使用另一个命令作为其参数时,就会出现问题。语言规则不允许在同一行上使用实际的第二个命令。在这种情况下,只是纯文本恰好具有与预先存在的命令相同的值。例如,假设Command1和Command2期望一个完整的句子作为它的参数。一些示例有效命令将是:

Command1:This is a sentence           
Command2:This is also a sentence
Command1:This sentence has Command2 in it

所有3个命令都有效,但最后一行会生成错误“missing”:“at”“,因为”Command2“有自己的解析规则。

我一直在阅读XTEXT文档,似乎我可以使用第一个令牌集谓词来避免在第一个令牌被识别时读取第二个令牌,但我找不到任何这样的例子。

1 个答案:

答案 0 :(得分:0)

我不确定我是否收到你的问题。也许您正在寻找的是以下内容:

Model: greetings+=Greeting*;
Greeting: "Hello" name=MyID "!";
MyID: "Hello" | ID;

现在允许解析

Hello You!
Hello Hello!
相关问题