простейшие правила в treetop не работают - PullRequest
4 голосов
/ 21 ноября 2011

У меня есть древовидная грамматика только с двумя правилами:

grammar RCFAE
    rule num
        [0-9]+ <Num>
    end

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end

Я пытаюсь разобрать простые строки ("A" и "5"). «5» распознается как Num, если я ставлю это правило первым, и возвращает ноль, если я ставлю это правило вторым. Точно так же «A» распознается как идентификатор, если я ставлю это правило первым, и возвращает ноль, если я ставлю это правило вторым. Я не могу понять, как эти два правила перекрываются в любом случае. Это сводит меня с ума!

Я что-то упускаю или не понимаю в древовидной структуре или регулярных выражениях? Заранее спасибо за помощь.

1 Ответ

6 голосов
/ 21 ноября 2011

Treetop ожидает, что первое правило будет «главным правилом».Он не пытается применить все правила, которые вы определили, пока одно из них не совпадает - он применяет только основное правило, а если оно не совпадает, он не работает.правило, которое может быть числом или идентификатором, например:

grammar RCFAE
    rule expression
        num / identifier
    end

    rule num
        [0-9]+ <Num>
    end

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end
...