在 Ply yacc 中解析多个表达式

时间:2021-05-28 22:19:23

标签: python ply

我正在尝试使用 Ply 解析文件。我需要能够识别表达式格式“a = 1;” (名称等于数字分号)。只要输入中每行只有一个表达式(a = 1;),一切都可以正常工作,但是当每行有多个表达式(a = 1; b = 2;)时,yacc 会出错。我已经确认一切都被正确标记,所以我不确定问题是什么。

这是我的代码的最小版本:

tokens = (
    'EQUALS',
    'SEMICOLON',
    'NAME',
    'VALUE',
)
t_ignore = ' \t'
def t_EQUALS(t):
    r"""="""
    return t
def t_SEMICOLON(t):
    r""";"""
    return t
def t_NAME(t):
    r"""\S+\s*(?==)"""
    t.value = t.value.strip()
    return t
def t_VALUE(t):
    r"""(?<==)[^;]+"""
    t.value = t.value.strip()
    return t
def t_newline(t):
    r"""\n"""
    t.lexer.lineno += len(t.value)
def t_error(t):
    print("Illegal character '%s' on line %d" % (t.value[0], t.lineno))
    t.lexer.skip(1)
def t_eof(t):
    return None

lexer = lex.lex()

def p_expression(p):
    '''
    expression : item
               | empty
    '''
    p[0] = p[1]
def p_item(p):
    '''
    item : NAME EQUALS VALUE SEMICOLON
    '''
    p[0] = ('name', p[1], p[3])
def p_error(p):
    print('Syntax error' + str(p) + " Line " + str(p.lineno))

parser = yacc.yacc()

for line in file:
    print(parser.parse(line))

0 个答案:

没有答案