所以我在Ply上编写了一个语法来识别基本的C语句,比如变量声明或while语句。现在,我要做的是能够连接所有的令牌,然后打印它或让它传播到树上,如下所示:
def p_whileStmt(p):
'''whileStmt : WHILE '(' condition ')' '{' stmt '}' '''
p[0] += p[1] + p[2] + p[3] + p[4] + p[5] + p[6] + p[7]
有没有比我使用的更好的方法来连接所有的标记(我只需要字符值,我只需要构建一个字符串)?在
编辑:在某些情况下,我需要连接除少数外的所有标记,例如:
^{pr2}$
您可以使用
对于
^{pr2}$p[0] += p[1]+p[3]+p[5]
你可以做到在python中,当您有一个字符串列表时,您通常希望使用
str.join
,这既简单又高效。在这里,你需要的是:假设p[0]已经是一个字符串。在
如果您需要连接特定的令牌,那么您的方法很好。对于{}来说,将每个标记都放在p中有点愚蠢,但关键是要非常接近yacc的行为。在
相关问题 更多 >
编程相关推荐