В настоящее время строится лексический анализатор, использующий PLY для python. Я пытаюсь сделать так, чтобы все промежуточные кавычки "" распознавались как строковые константы, однако, как вы можете видеть, это не так.
мое текущее определение stringconst
def t_STRINGCONSTANT(t):
r'\"([^\\\n]|(\\.))*?\"'
Входная строка:
'println( “factori alof 10 is” , fact (10), “rom the recursive function” );'
output:
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)
выглядит независимо от того, какая комбинация регулярного выраженияЯ использую, я всегда получаю этот вывод.