【发布时间】:2011-02-16 21:09:30
【问题描述】:
我使用 ply 作为我的 lex 解析器。我的规格如下:
t_WHILE = r'while'
t_THEN = r'then'
t_ID = r'[a-zA-Z_][a-zA-Z0-9_]*'
t_NUMBER = r'\d+'
t_LESSEQUAL = r'<='
t_ASSIGN = r'='
t_ignore = r' \t'
当我尝试解析以下字符串时:
"while n <= 0 then h = 1"
它给出以下输出:
LexToken(ID,'while',1,0)
LexToken(ID,'n',1,6)
LexToken(LESSEQUAL,'<=',1,8)
LexToken(NUMBER,'0',1,11)
LexToken(ID,'hen',1,14) ------> PROBLEM!
LexToken(ID,'h',1,18)
LexToken(ASSIGN,'=',1,20)
LexToken(NUMBER,'1',1,22)
它不识别令牌 THEN,而是将“hen”作为标识符。
有什么想法吗?
【问题讨论】:
-
其实我发现因为t_ignore = r" \t",它忽略了字母"t"(别问我为什么!)。所以我删除了它,现在它开始将“then”作为令牌。
-
@Karan:
r' \t'是一个 raw 字符串。我的猜测是\t无法在其中转义,如果你删除了最初的r=>t_ignore = ' \t'