如何修复 Python 中的 PLY 语法错误?

问题描述

我最近了解了 ply python 模块,我对它很感兴趣。现在我正在尝试实现类似于 Brainfuck 的东西,但即使在初始阶段我也有无法修复的错误。为了响应下面的代码,解析器给了我以下行:

yacc: Syntax error at line 1,token=OUT

我尝试了很多录音选项,但都无济于事。 也许你会在这代码中发现错误? 在此先感谢您的帮助。

tokens = (
'ADD','OUT','IN','SEMI','INT','LPAREN','RPAREN',)

# Tokens

t_ADD = r'add'
t_OUT = r'out'
t_IN = r'in'
t_LPAREN  = r'\('
t_RPAREN  = r'\)'
t_SEMI = r';'

def t_INT(t):
    r'[-]?\d+'
    try:
       t.value = int(t.value)
    except ValueError:
       print("Integer value too large %d",t.value)
       t.value = 0
    return t

# Ignored characters
t_ignore = " \t"

def t_newline(t):
    r'\n+'
    t.lexer.lineno += t.value.count("\n")

def t_error(t):
    print("Illegal character '%s'" % t.value[0])
    t.lexer.skip(1)

# Build the lexer
import ply.lex as lex
lexer = lex.lex()

ceils = [0] * 10
i = 0

# Parsing rules



def p_add_command(t):
    '''expr : ADD SEMI
        | ADD INT SEMI'''
    if len(t) == 3:
        ceils[i] += 1
    else:
        ceils[i] += t[2]
    t[0] = ceils[i]

def p_out_command(t):
    '''expr : OUT SEMI
        | OUT INT SEMI'''
    if len(t) == 3:
        print(ceils[i])
    else:
        print(t[2])
t[0] = ceils[i]

def p_in_command(t):
    """expr : IN SEMI
        | IN INT SEMI"""
    try:
        if len(t) == 3:
            temp = input()
            ceils[i] = int(temp)
        else:
            ceils[i] = t[2]
    except ValueError:
        print(f'Invalid integer: {temp}!')
    t[0] = ceils[i]


def p_expression_group(t):
    'expr : LPAREN expr RPAREN'
    t[0] = t[2]

def p_expression_number(t):
    'expr : INT'
    t[0] = t[1]


import ply.yacc as yacc
parser = yacc.yacc()

s = """add; out;"""
parser.parse(s)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)