我正在学习PLY,但我的学习不起作用。
问题是 我不了解yacc规则。 哪个在下面?
xor ebx ecx
pop ecx
add ebx edi
mov eax ebx
pop ebx
push 67E0h
LexToken(MOV,'mov',12,34)
LexToken(R_EAX,'eax',12,38)
LexToken(R_EBX,'ebx',12,43)
Syntax error at 'mov'
tokens = (
'MOV', 'PUSH', 'INC', 'SHR', 'HEX_NUMBER', 'DEC_NUMBER',
'R_EAX', 'R_AX', 'R_ECX', 'R_CX', 'R_EBX', 'R_BX',
'R_EDX', 'R_DX', 'R_EDI', 'R_DI', 'R_ESI', 'R_SI',
'R_EBP', 'R_BP', 'R_ESP', 'R_SP', )
t_MOV = r'mov'
t_PUSH = r'push'
t_INC = r'inc'
t_SHR = r'shr'
t_R_EAX = r'eax'
t_R_ECX = r'ecx'
The rest is omitted.
def p_statement(t):
'''statement : statement
| reg32
| reg16
| number
'''
def p_number(t):
''' number : HEX_NUMBER
| DEC_NUMBER
'''
t[0] = t[1]
def p_regs32(t):
''' reg32 : R_EAX
| R_EBX
| R_ECX
| R_EDX
| R_ESI
| R_EDI
| R_ESP
| R_EBP
'''
t[0] = t[1]
def p_reg16(t):
''' reg16 : R_AX
| R_CX
| R_DX
| R_BX
| R_DI
| R_SI
| R_SP
| R_BP
'''
t[0] = t[1]
def p_mov(t):
''' statement : MOV reg32 number
'''
regs[t[2]] = t[3]
#do mov
def p_error(t):
print( "Syntax error at '%s'" % t.value )
我无法理解这个yacc规则。 有没有这方面的教程?