2013-05-26 7 views
1

Я использую генератор синтаксического анализа waxeye для генерации парсера python для некоторой грамматики. К сожалению, когда я пытаюсь разобрать любой текст, я почти каждый раз, когда получаю ту же ошибку:Анализ синтаксического анализатора waxeye

parse error: failed to match 'whitespace' at line=1, col=10, pos=10 

или

parse error: failed to match 'ws' at line=1, col=10, pos=10 

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

Вот питона код:

import waxeye 
import robLang 
text = ' block is red ' 


def analyze(input): 
    ast = robLang.Parser().parse(input) 
    if isinstance(ast, waxeye.ParseError): 
     return ast 
    else: 
     return sum(ast.children[0]) 

result = analyze(text) 
print result 

и грамматика определение:

statement <- ws thing ws isWord wse adjective ws ?(adjectives) 

thing <- objectType ?(ws name) 

objectType <- 'pyramid'|'ball'|'block'|'boot'|'leg'|'degree' 

name <- [a-zA-Z] *[a-zA-Z0-9_-] 

isWord <- 'is' 

adjectives <- *(adjective ws) 

colour <- 'red'|'green'|'blue'|'black'|'white'|'yellow'|'orange'|'purple' 
     |'cyan'|'magenta' 

size <- 'small'|'big' 

moralDirection <- 'good'|'bad' 

adjective <- colour|size|moralDirection 

number <- +[0-9] ?('.' +[0-9]) ws 

ws <: *[ \t\n\r] 

ответ

-1
statement <- ws thing ws isWord wse adjective ws ?(adjectives) 

Изменение wse в ws.

Смежные вопросы