在语法上连接字符串

时间:2014-11-29 22:40:05

标签: python string grammar string-concatenation ply

所以我在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]

是否有更好的方法来连接所有令牌(我只需要字符值,我只需要构建一个字符串)而不是我使用的那个?

编辑:在某些情况下,我需要连接除少数之外的所有令牌,例如:

def p_whileStmt(p):
    '''whileStmt : WHILE '(' condition ')' '{' stmt '}' '''
    p[0] += p[1] + p[3] + p[5]

2 个答案:

答案 0 :(得分:3)

您可以使用

来避免+=
p[0] = ''.join(p)

p[0] += p[1]+p[3]+p[5]你可以做

p[0] += ''.join(p[1::2])

答案 1 :(得分:2)

在python中,当你有一个字符串列表时,你通常想要使用str.join,这既简单又高效。在这里,您需要以下内容:

p[0] += ''.join( p[1:] )

假设p [0]已经是一个字符串。

如果你需要连接特定的令牌,你的做法很好。将ply中的每个标记放在p中,这有点愚蠢的设计,但重点是非常接近yacc的行为。