Проблема синтаксического анализа Ply Lex

Я использую 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, вместо этого он принимает "курицу" в качестве идентификатора.

Есть идеи?

6
задан Bart Kiers 17 February 2011 в 11:23
поделиться