如何在PLY中定义字符串常量标记?

问题描述 投票:0回答:1

当前正在使用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)

似乎无论我使用哪种正则表达式组合,我总能得到该输出。

python python-3.x lex lexical-analysis ply
1个回答
0
投票

非常仔细地查看Ply错误消息中显示的引号:

Illegal character '“'

与您的正则表达式对比:

r'\"

使它们更大可以帮助:

““

© www.soinside.com 2019 - 2024. All rights reserved.