我正在编写一个语法来解析sql语句。我有以下规则:
show_databases :
SHOW DATABASES { System.out.println("Showing databases");
;
当我的输入为show databases
时,我收到了消息。但是,当我的输入为show databases now
时,我会看到该消息。我正在构建一个REPL,所有行以;
结束。我希望得到一个错误,因为语法错误。有什么想法吗?
答案 0 :(得分:2)
匹配输入的结尾:
SHOW DATABASES ';'
或
SHOW DATABASES EOF
你拥有它的方式,解析器不知道以后作为另一个语句的一部分不能“现在”。实际上,它在成功匹配规则时会停止,如果不需要则甚至不会查看下一个令牌。