【发布时间】:2014-03-08 10:45:08
【问题描述】:
我对 ANTLR 还很陌生,但遇到了问题。
我正在尝试为一种语言编写一个语法,该语法包括单行 cmets 和以相同注释标识符开头的语言指令。例如:
--This is a comment. What follows is a directive with a parameter
--directive:param
指令将始终采用该格式 - 两个破折号后跟一个命令、一个冒号和一个参数。
我想让词法分析器忽略实际注释(将其发送到隐藏通道),但对指令进行标记。我有以下词法分析器规则:
DCOMMAND : DATABASE;
fragment DATABASE : D A T A B A S E;
fragment COMMENTSTART : '--';
LINE_COMMENT : COMMENTSTART ~(DCOMMAND|('\n'|'\r')*) {$channel=HIDDEN;};
fragment A : ('a'|'A');
fragment B : ('b'|'B');
fragment C : ('c'|'C');
fragment D : ('d'|'D');
....
目前只有一个指令:“数据库”。 DCOMMAND 令牌最终可能代表几个关键字。问题是我的词法分析器总是将任何以“--”开头的东西推入隐藏通道。如何使 LINE_COMMENT 令牌与指令不匹配?还是我必须将评论处理移到解析器中?
【问题讨论】:
-
评论可以
--This:开头吗?换句话说,--后跟一个标识符后跟:是否总是为指令保留? -
后者是真的。
-- This:和--This also:不应该是指令,但是...注意空格。