【发布时间】:2019-05-07 14:20:32
【问题描述】:
我还是 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”:,因为“Command2”有自己的解析规则。
我一直在阅读 XTEXT 文档,似乎我可以使用第一个标记集谓词来避免在识别第一个标记时读取第二个标记,但我找不到任何示例。
【问题讨论】: