gram上的ply连接字符串

2024-05-23 17:03:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 方法字符串标记声明编辑def语法语句
2条回答

您可以使用

p[0] = ''.join(p)

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

^{pr2}$

在python中,当您有一个字符串列表时,您通常希望使用str.join,这既简单又高效。在这里,你需要的是:

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

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

如果您需要连接特定的令牌,那么您的方法很好。对于{}来说,将每个标记都放在p中有点愚蠢,但关键是要非常接近yacc的行为。在

相关问题 更多 >