【发布时间】:2018-12-20 17:23:02
【问题描述】:
我正在尝试创建 --i; 语句。
但我的问题在于 HQL 的 单行注释规则:
L_S_COMMENT : ('--' | '//') .*? '\r'? '\n' -> channel(HIDDEN) ;
我在lexer中写了规则:
T_SUB2 : '--' ;
T_SEMICOLON : ';' ;
解析器中的规则:
dummy_rule: T_SUB2 'i' T_SEMICOLON ;
当我测试规则时,它可以正常显示解析树,但是当我按 ENTER 换行时显示错误,并且它不会接受还有更多规则,我知道它是 L_S_COMMENT 规则,因为当我删除它时,规则可以正常工作。
但删除它并不是最佳解决方案,任何可能导致此问题以及如何绕过它的想法。
【问题讨论】:
-
您的语法似乎自相矛盾。非正式地,
--何时是评论的开始,何时不是? -
这就是为什么我问如何在不删除评论规则的情况下跳过这个矛盾
-
@Makdous:这不是语法问题。这是一个语言设计问题。当您查看评论时,您将如何确定评论是评论还是
--声明?你必须先回答这个问题,然后你才能设计一个适合的语法。就个人而言,我认为必须回答这个问题表明添加--f作为声明并不是一个好主意。毕竟,f -= 1几乎不会更难输入,而且阅读起来也不会那么混乱。
标签: parsing antlr antlr4 lexer