在Xtext中解析字符串

时间:2011-04-24 22:12:49

标签: xtext

我目前正在尝试为我们在公司使用的内部语言编写基于Eclipse的编辑器。该语言是以下形式的语句集合:

{action}: {arguments}

......在自己的路上。 {arguments}的格式取决于正在执行的{action}的类型。脚本片段的示例可能如下所示:

banner: Some string with numbers and punctuation (23) in it!
# some comment
timeout: 42

我的问题是解析这样一个片段。我有评论和超时声明工作,但我似乎无法创建一个规则来涵盖横幅声明。我的所有尝试都导致Antlr“令牌定义无法访问”警告,或者编辑器无法匹配输入。我已经为banner语句尝试了以下规则:

Banner:
  'banner:' name=ANY_OTHER*;

Banner:
  'banner:' name=FF_STRING;
terminal FF_STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'.'|':'|' ')+;

......这给了我一些警告。我想到的一个黑客就是简单地创建一个与SL_COMMENT相同的终端,在开头用'banner:'而不是'#'。缺点是我没有获得语法着色,也没有在自动完成列表中显示“banner”。

欢迎任何建议。

1 个答案:

答案 0 :(得分:4)

您可以尝试使用数据类型规则和一组简化的终端规则。 这样的事情可以奏效:

Banner
  'Banner:' name=Value;
Value hidden(): 
  (ID | WS | INT | <any keyword from your grammar>)* LineBreak;
terminal LineBreak: '\r' '\n'? | '\n';
termianl WS: (' '|'\t') *