问题描述
我最近了解了 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 (将#修改为@)