在解析符号之前在PLY Python中执行操作

时间:2015-05-15 14:15:14

标签: python yacc ply

我正在使解析器立即将令牌解析为三地址代码。 要在调用函数时生成正确的TAC代码,我需要调用我的函数" GiveTac"解析所有令牌之前和之后。

我的问题是我无法在解析令牌之前找到调用函数的方法。在PLY的文档中有一个第6.11节嵌入式操作,声称你可以简单地添加一个如下的空规则:

def p_foo(p):
    "foo : A seen_A B C D"
    print("Parsed a foo", p[1],p[3],p[4],p[5])
    print("seen_A returned", p[2])

def p_seen_A(p):
    "seen_A :"
    print("Saw an A = ", p[-1])   # Access grammar symbol to left
    p[0] = some_value            # Assign value to seen_A

但如果我在我的代码中尝试这个,我总是在输入中得到一个"语法错误!"错误。 这是我的代码:

def p_fun_declaration_type_formal_pars_block(p):
    'fun_declaration    : before type NAME LPAR formal_pars RPAR block'


def p_fun_before_fun(p):
    'before :'
    GiveTAC("function",None,None,'main')
    p[0]=p[1]

如果我删除"之前"在我的p_fun_declaration_type_formal_pars_block函数中,它确实接受了我的语法。

我的代码的Pastebin链接: Yacc.py

Parser.out

0 个答案:

没有答案