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

2024-10-02 22:23:42 发布

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

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

似乎不管我使用什么regex组合,我总是得到那个输出。你知道吗


Tags: the字符串idromfunctionrecursivefactply
1条回答
网友
1楼 · 发布于 2024-10-02 22:23:42

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

Illegal character '“'

与正则表达式对比:

r'\"

把它们变大有助于:

“”

在准备测试输入时,避免使用编辑器,因为编辑器会自动将引号更改为更华丽的“排版引号”。你知道吗

相关问题 更多 >