为什么会给我这个错误? Python解析器

时间:2018-09-21 04:49:25

标签: parsing ply

我正在使用ply开发一个解析器。我有这个解析器规则:

def p_maint(p):
    'maint : PROGRAMA ID declaraciones'

def p_declaraciones(p):
    '''declaraciones : vacio
                     | declaraciones
                     | tipo ID definicion_vector ";"'''

def p_tipo(p):
    '''tipo : ENTERO
            | FLOTANTE
            | CHAR'''

def p_definicion_vector(p):
    '''definicion_vector : vacio 
                         | "[" CTE_ENTERO "]" '''


def p_vacio(p):
    'vacio : '

但这给了我一个警告:

WARNING: 1 reduce/reduce conflict
WARNING: reduce/reduce conflict in state 8 resolved using rule (maint -> PROGRAMA ID declaraciones)
WARNING: rejected rule (declaraciones -> declaraciones) in state 8
WARNING: Rule (declaraciones -> declaraciones) is never reduced

如何清除此错误?

1 个答案:

答案 0 :(得分:1)

您有生产declaraciones -> declaraciones,这毫无意义。 (它不会扩展语言,并且会使语法不明确。)

我的猜测是,您打算加入两个右侧: '''declaraciones : vacio | declaraciones tipo ID definicion_vector ";"'''