Я пытаюсь сделать синтаксический текстовый корректор для класса моих компиляторов. Идея такова: у меня есть некоторые правила, которые присущи языку (в моем случае португальскому), например, «Действительная фраза - SUBJECT VERB ADJECTIVE», как в «Ruby is great».
Хорошо, сначала я должен токенизировать ввод "Ruby is great". Итак, у меня есть текстовый файл «глаголы», с множеством глаголов, один за другим. Тогда у меня есть один текст "прилагательные", один "местоимения" и т. Д.
Я пытаюсь использовать Ragel для создания парсера, но я не знаю, как я мог бы сделать что-то вроде:
%%{
machine test;
subject = <open-the-subjects-file-and-accept-each-one-of-them>;
verb = <open-the-verbs-file-and-accept-each-one-of-them>;
adjective = <open-the-adjective-file-and-accept-each-one-of-them>;
main = subject verb adjective @ { print "Valid phrase!" } ;
}%%
Я посмотрел на ANTLR, Lex / Yacc, Ragel и т. Д. Но не смог найти тот, который, казалось бы, решил эту проблему. Единственный способ сделать это, о котором я мог подумать, - это предварительно обработать входной файл Ragel, чтобы моя программа считала файл и записала его содержимое в нужном месте. Но мне это решение тоже не нравится.
Кто-нибудь знает, как я мог это сделать? Нет проблем, если это не с Ragel, я просто хочу решить эту проблему. Я хотел бы использовать Ruby или Python, но в этом тоже нет необходимости.
Спасибо.