1

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

{action}: {arguments}

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

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

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

Banner:
  'banner:' name=ANY_OTHER*;

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

...这给了我 antlr 警告。我想出的一个技巧是简单地创建一个与 SL_COMMENT 相同的终端,在开头使用“banner:”而不是“#”。缺点是我没有得到语法着色,“横幅”也没有出现在自动完成列表中。

欢迎任何建议。

4

1 回答 1

4

您可以尝试使用数据类型规则和一组减少的终端规则。像这样的东西可以工作:

Banner
  'Banner:' name=Value;
Value hidden(): 
  (ID | WS | INT | <any keyword from your grammar>)* LineBreak;
terminal LineBreak: '\r' '\n'? | '\n';
termianl WS: (' '|'\t') *
于 2011-04-25T18:35:43.997 回答