我正在尝试使用PLY (python implementation of yacc)yacc
编写一个相当简单的语法,并且在我想要减少标记字符串时遇到了麻烦。
我想解释一系列采用不同类型参数的命令。每种不同类型的论点都有不同的标记。出来的标记字符串lex
可能如下所示:
COMMAND VARARG VARARG STRARG
COMMAND VARARG STRARG STRARG
我想yacc
将这些行中的每一行简化为一个名为instruction
. 但是,yacc
拒绝停止减少最后一个参数 ( ) 之后的第一行,并由于意外标记STRARG
而生成语法错误。COMMAND
也就是说,不是减少COMMAND VARARG VARARG STRARG
到instruction
,而是再yacc
移动一次来获取COMMAND VARARG VARARG STRARG COMMAND
(从下一行拿起最后COMMAND
一个,不应该被阅读)。
我的yacc
代码部分如下所示:
def p_rule1(p):
r'instruction : COMMAND VARARG VARARG STRARG'
# do stuff
def p_rule2(p):
r'instruction : COMMAND VARARG STRARG STRARG'
# do other stuff
我是否在我的规则规范中犯了一些明显的错误?这是我第一次使用lex
/ yacc
,所以我不会感到惊讶。