Feuerbach
написал 27 апреля 2006 года в 00:05 (1074 просмотра)
Ведет себя
как мужчина; открыл 53 темы в форуме, оставил 447 комментариев на сайте.
Собираюсь написать простенький интерпретатор выражений (штук 10 операций с разными приоритетами, скобки, переменные…). Что будет целесообразнее: изучить матчасть и самому написать парсер или изучить ради такого дела yacc+lex?
Подобное делаю впервые.
PS писать буду на C
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Я бы посоветовал зайти на boost.org и не заниматься изобретанием велосипеда.
Хотя если есть желание именно написать самому — то флаг в руки, будет только полезно.
Сказать `info bison' и сделать copy-paste ;)
2 LONGOBARD
Ты б еще на CPAN послал :-)
К тому же, это не просто арифметические выражения. Или там есть что-то именно для парсинга?
Моя твоя не понимать. Нафиг копипаст-то?
А bison, yacc — какая разница..
а чтобы не набирать то, что уже набрано :)
разные реализации. bison — это gnu’шный вариант.
Я разве где-то спрашивал мануал по bison?
Перечитай плз вопрос в верхнем посте.
Блин, ты спросил:
А я ответил, что можно просто влезть в мануал по bison’у (который почти yacc), и ничего не изучая получить интерпретатор, который там идёт в качестве примера. Могу ещё добавить, что там несколько примеров, как польской нотации, так и инфиксной. Что не нравиться? Тема целесообразности не раскрыта? Так ты сам уж решай, что целесообразнее — тебе конечная цель виднее.
поизучать всё равно надо бы, хотя бы для того, чтобы в голове отложилось. что и как происходит и где ловить возможные глюки… :)
parser выражений состоит обычно из двух частей: tokenizer — разбивающий входной поток символов на список/массив элементарных конструкций языка; translator — из полученного списка/массива строит дерево выражения, основываясь на приоритетах инфиксных/префиксных/постфыиксных операций.
Там есть фактически все :) И для парсинга тоже.
Просто ты скажи цель. У тебя цель быстро сделать надежный шустрый парсер, или цель именно самому его сделать?
А, ну так бы сразу и сказал. Ибо:
- у меня `info bison` выдает обычный manpage, без всяких примеров;
- не сомневаюсь, что найти готовый арифметический интерпретатор не составит труда, но, повторюсь, совсем ничего не изучая не получится, т.к. у меня не совсем обычный синтаксис.
Целесообразнее то, что проще делается. Не зная на данный момент ни алгоритмов разбора (ну, почти), ни принципов работы yacc/lex, я не могу сделать вывод.
Иными словами, стоит ли ради конструкции описанной выше сложности использовать упомянутые инструменты генерации кода, или это будет стрельба из пушки по воробьям?
Самому сделать надежный парсер. В отношении «шустрости» вопрос пока не стоит и вряд ли когда-нибудь станет (мизерные объемы).
В (ж) эти раздутые мега-либы для плюсов, которые так запутаны, что хер просцышь, как там оно работает.
Берёшь Драконью книгу, lex, yacc. Пишешь сначала сам, потом на lex и yacc. Сравниваешь результат. Осознаёшь, что lex+yacc — жжут аццки. Бежишь и покупаешь книгу «lex & yacc» от O’Reilly.