当前正在使用PLY for python构建词法分析器。我正在尝试使引号“”之间的任何内容都被识别为字符串常量,但是正如您所看到的,情况并非如此。
我当前的stringconst定义
def t_STRINGCONSTANT(t):
r'\"([^\\\n]|(\\.))*?\"'
输入字符串:
'println( “factori alof 10 is” , fact (10), “rom the recursive function” );'
输出:
LexToken(PRINTLN,'println',1,0)
LexToken(LEFTPAREN,'(',1,7)
Illegal character '“'
LexToken(ID,'factorialof10is',1,10)
Illegal character '”'
LexToken(COMMA,',',1,27)
LexToken(ID,'fact',1,29)
LexToken(LEFTPAREN,'(',1,34)
LexToken(INTCONSTANT,10,1,35)
LexToken(RIGHTPAREN,')',1,37)
LexToken(COMMA,',',1,38)
Illegal character '“'
LexToken(ID,'rom',1,41)
LexToken(ID,'the',1,45)
LexToken(ID,'recursive',1,49)
LexToken(ID,'function',1,59)
Illegal character '”'
LexToken(RIGHTPAREN,')',1,69)
LexToken(SEMICOLON,';',1,70)
似乎无论我使用哪种正则表达式组合,我总能得到该输出。
非常仔细地查看Ply错误消息中显示的引号:
Illegal character '“'
与您的正则表达式对比:
r'\"
使它们更大可以帮助: