Как определить строковую константу токена в PLY? - PullRequest
0 голосов
/ 01 октября 2019

В настоящее время строится лексический анализатор, использующий 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)

выглядит независимо от того, какая комбинация регулярного выраженияЯ использую, я всегда получаю этот вывод.

1 Ответ

1 голос
/ 01 октября 2019

Внимательно посмотрите на кавычки, показанные в сообщении об ошибке Ply:

Illegal character '“'

Контраст с вашим регулярным выражением:

r'\"

Увеличение их может помочь:

«"

При подготовке тестового ввода избегайте использования редакторов, которые автоматически заменяют кавычки на более «типографские кавычки».

...