Чем парсить тексты?
ANTLR, кажется, умеет AST в XML сериализовывать.
А этот ANTLR, насколько я понимаю, работает по тем же принципам, что и Flex - для заданных правил пишет программу на нужном языке; это не так интересно, как если бы была готовая .NET программа, которая получала на входе правила, обрабатывала их, запоминала, и тут же в соответствии с ними парсила тексты и отдавала готовые объекты.
Не вижу проблем с помощью ANTLR написать то, что ты хочешь. Правда, он джаву хочет.
У ANTLR даже уже есть готовые языки для описания грамматик и того, что с получившимися AST делать (смотри TreeParser-ы). Кода кроме грамматик придётся написать строчек 20.
Вообще, это хорошая задачка по программированию для студентов
Вообще, это хорошая задачка по программированию для студентовНичего ты, Михаил, не понимаешь в хороших задачках.
Я так понимаю автору нужен не генератор парсеров, а универсальный парсерчто такое "универсальный парсер"?
Например, в случае с flex универсальным парсером является только целый комбайн flex+gcc+libc+etc. А мне не хочется, чтобы в комплект парсера входили какие-то там компиляторы си, так не интересно.
Ну и хочется, чтобы мы за пределы парсера вообще не вылезали - тогда в flex надо будет интегрировать компилятор си и интерпретатор машинных кодов.
Если что flex'а достаточно только для самых топорных грамматик. Полуркай еще yacc (bison).
У тебя что, грамматика на лету изменяетсяСовсем на лету - не изменяется.
Но когда при каждом изменении грамматики мы получаем новые исходники на си, которые надо снова компилировать в бинарники - неспортивно.
Ах да, и ещё, насколько я понимаю, при этом придётся в правилах (грамматике) писать куски кода на языке, на который этот ваш yacc или flex скомпилируют эту грамматику. Это уже как-то совсем уныло.
"Универсальный парсер" - это программа, которая парсит тексты по произвольным заданным правилам, не создавая какие-то промежуточные программы..net-ные генераторы под это подходят, т.к. парсер может создаваться и на лету.
.net-ные генераторы под это подходятЧто значит ".net-ный генератор"? Я так понимаю, тот, который работает под .net?
Можно примеры таких? В статье в википедии про платформы генераторов ничего не сказано - только про целевые языки.
Ничего ты, Михаил, не понимаешь в хороших задачках.Моя задачка - слишком простая?
ЗЫ: Вообще, у меня почему-то при взгляде на грамматику из первого поста сразу возникают ассоциации со всякими там хаскеллями и прологами. Ещё бы понять, при чём тут они.
Можно примеры таких? В статье в википедии про платформы генераторов ничего не сказано - только про целевые языки.как минимум все те где написано Development Platform = .Net Framework.
Мне кажется, что там речь всё-таки немного не о том. Почти у всех написано Development Platform = all, и что-то мне кажется, что это означает "наш генератор сделает код для любой платформы, для какой напишете куски кода в описании грамматики", а не "наш генератор существует в версиях для .NET, Java, и даже виртуальной машины васи пупкина".
как минимум все те где написано Development Platform = .Net Framework.
OSLO & M?
Мы как-то таким пользовались. там единственная заморочка - компиляция таблиц для него.
т.е. там идея примерно такая: в парсер в рантайме можно подгружать таблицы, скомпилированные отдельно. сам парсер был открытым, компилятор таблиц - закрытым (поставлялась cl-утилита и dll для компиляции таблиц).
upd.
за 5 лет "eventually" так и не свершилось..
Are you going to release the Builder source code?http://devincook.com/goldparser
Eventually the source code will be released, but this will be some time from now.
Нет, но «хорошая задачка для студента» — это, к примеру, написать парсер заданной грамматики. А вот написать генератор парсеров — это уже надолго и не так просто. Вот например, пользователь за пару месяцев не напишет некоторого подобия bison.Ничего ты, Михаил, не понимаешь в хороших задачках.Моя задачка - слишком простая?
Вот например, пользователь за пару месяцев не напишет некоторого подобия bison.Смелое утверждение
Оставить комментарий
kruzer25
Где-то встречал какой-то такой синтаксис (где, уже не помню):Хочется из этого и
получить какую-то структуру вроде
Чем это можно сделать?
Просто не хочется руками писать конкретный парсер; накопал решения вроде flex - но они некрасивы; там для каждого элемента нужно сразу писать, что с ним делать; и они на выходе дают не готовую структуру для входного текста, а программу на некотором языке, в которую этот текст надо засунуть - это как-то совсем уж некрасиво.