微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何修复 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 举报,一经查实,本站将立刻删除。