nixp.ru v3.0

18 января 2017,
среда,
11:07:33 MSK

DevOps с компанией «Флант»
Аватар пользователя Feuerbach
Feuerbach написал 27 апреля 2006 года в 00:05 (513 просмотра) Ведет себя как мужчина; открыл 53 темы в форуме, оставил 447 комментариев на сайте.

Собираюсь написать простенький интерпретатор выражений (штук 10 операций с разными приоритетами, скобки, переменные…). Что будет целесообразнее: изучить матчасть и самому написать парсер или изучить ради такого дела yacc+lex?

Подобное делаю впервые.

PS писать буду на C

Longobard

Я бы посоветовал зайти на boost.org и не заниматься изобретанием велосипеда.

Хотя если есть желание именно написать самому — то флаг в руки, будет только полезно.

rgo
Feuerbach
Что будет целесообразнее: изучить матчасть и самому написать парсер или изучить ради такого дела yacc+lex?

Сказать `info bison' и сделать copy-paste ;)

Feuerbach

2 LONGOBARD

Ты б еще на CPAN послал :-)

К тому же, это не просто арифметические выражения. Или там есть что-то именно для парсинга?

Feuerbach
rgo
Сказать `info bison' и сделать copy-paste ;)

Моя твоя не понимать. Нафиг копипаст-то?

А bison, yacc — какая разница..

rgo
Feuerbach
Моя твоя не понимать. Нафиг копипаст-то?

а чтобы не набирать то, что уже набрано :)

Feuerbach
А bison, yacc — какая разница..

разные реализации. bison — это gnu’шный вариант.

Feuerbach

Я разве где-то спрашивал мануал по bison?

Перечитай плз вопрос в верхнем посте.

rgo

Блин, ты спросил:

Что будет целесообразнее: изучить матчасть и самому написать парсер или изучить ради такого дела yacc+lex?

А я ответил, что можно просто влезть в мануал по bison’у (который почти yacc), и ничего не изучая получить интерпретатор, который там идёт в качестве примера. Могу ещё добавить, что там несколько примеров, как польской нотации, так и инфиксной. Что не нравиться? Тема целесообразности не раскрыта? Так ты сам уж решай, что целесообразнее — тебе конечная цель виднее.

Genie

поизучать всё равно надо бы, хотя бы для того, чтобы в голове отложилось. что и как происходит и где ловить возможные глюки… :)

parser выражений состоит обычно из двух частей: tokenizer — разбивающий входной поток символов на список/массив элементарных конструкций языка; translator — из полученного списка/массива строит дерево выражения, основываясь на приоритетах инфиксных/префиксных/постфыиксных операций.

Longobard
Feuerbach
К тому же, это не просто арифметические выражения. Или там есть что-то именно для парсинга?

Там есть фактически все :) И для парсинга тоже.

Просто ты скажи цель. У тебя цель быстро сделать надежный шустрый парсер, или цель именно самому его сделать?

Feuerbach
rgo
А я ответил, что можно просто влезть в мануал по bison’у (который почти yacc), и ничего не изучая получить интерпретатор, который там идёт в качестве примера.

А, ну так бы сразу и сказал. Ибо:

- у меня `info bison` выдает обычный manpage, без всяких примеров;

- не сомневаюсь, что найти готовый арифметический интерпретатор не составит труда, но, повторюсь, совсем ничего не изучая не получится, т.к. у меня не совсем обычный синтаксис.

rgo
Что не нравиться? Тема целесообразности не раскрыта? Так ты сам уж решай, что целесообразнее — тебе конечная цель виднее.

Целесообразнее то, что проще делается. Не зная на данный момент ни алгоритмов разбора (ну, почти), ни принципов работы yacc/lex, я не могу сделать вывод.

Иными словами, стоит ли ради конструкции описанной выше сложности использовать упомянутые инструменты генерации кода, или это будет стрельба из пушки по воробьям?

LONGOBARD
Просто ты скажи цель. У тебя цель быстро сделать надежный шустрый парсер, или цель именно самому его сделать?

Самому сделать надежный парсер. В отношении «шустрости» вопрос пока не стоит и вряд ли когда-нибудь станет (мизерные объемы).

myst

В (ж) эти раздутые мега-либы для плюсов, которые так запутаны, что хер просцышь, как там оно работает.

Берёшь Драконью книгу, lex, yacc. Пишешь сначала сам, потом на lex и yacc. Сравниваешь результат. Осознаёшь, что lex+yacc — жжут аццки. Бежишь и покупаешь книгу «lex & yacc» от O’Reilly.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.