LINUX.ORG.RU

Разработка парсеров вручную.


0

2

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

Щас так вообще делается или в 100% коммерческих случаев используются автоматические генераторы нализаторов и парсеров по объявленным правилам (lex, bison, ...)?

lex, byson, ещё там что-то было

TERRANZ ★★★★
()

или в 100% коммерческих случаев используются автоматические генераторы нализаторов и парсеров по объявленным правилам (lex, bison, ...)?

Скорее наоборот.

stack_protector
()

Для маленьких грамматик можно использовать комбинаторы парсеров, но они довольно медленные.

KblCb ★★★★★
()

в 100% коммерческих случаев

по известным причинам это проверить довольно таки сложно

а вообще обычно - да, flex, bison

shty ★★★★★
()

Конечно, в большинстве случаев используют автоматические генераторы парсеров. На самом деле, в наше время даже IDE с отладчиками можно автоматически делать: на чём реализовать DSL?

ringill
()

Ничего нового в парсерах и лексерах быть не должно.
Лексер - ничего сверхъестественного в разборе на исходника на токены нет.

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

Стоит заметить, что граммктика C++ контекстно-зависимая.

Интерес мне кажется больше представляют: оптимизация parse tree и AST. Кодогенерация и оптимизация байт-кода.

invy ★★★★★
()
Ответ на: комментарий от invy

контекстно-свободную - естественно уже не табличному парсеру.

invy ★★★★★
()

парсер своего языка, сделал вручную

Жуть. Баги парсера как ловить планируешь?

unC0Rr ★★★★★
()
Ответ на: комментарий от Rzhepish

Велосипеды не нужны, пиши eDSL.

1. на чем?
2. есть пример реализации полноценного eDSL, ну вот например - встроенный bash script, без всяких скобочек и пр., иначе это не DSL, а говно какое-то

anonymous
()
Ответ на: комментарий от Rzhepish

зачем писать велосипеды?

с таким подходом тебе на виндовс - одна ОС, официальный ЯП( C# ), официальная IDE и пр., зачем писать велосипеды, а тем более ими пользоваться?

Баш уже написали, хвати уже, не считаешь?

ты еще скажи, что SQL уже написали, умник хренов, или не понимаешь зачем DSL и его реализация?

anonymous
()
Ответ на: комментарий от anonymous

> без всяких скобочек и пр., иначе это не DSL, а говно какое-то

Скобочки? Может тебе ещё и пробелы не нравятся? Что за комплексы?

Rzhepish
()
Ответ на: комментарий от anonymous

Пошёл он нах, хватит запихивать вагоны жратвы в латексовых троллей.

kiverattes ★☆
() автор топика
Ответ на: комментарий от anonymous

> зачем писать велосипеды, а тем более ими пользоваться?

Я не фанат ГНУ/Линукс (пользуюсь только из-за необходимости), так что на этот вопрос не ответить не смогу.

Rzhepish
()
Ответ на: комментарий от Rzhepish

Скобочки? Может тебе ещё и пробелы не нравятся? Что за комплексы?

желание использовать нормальный( в идеале - оригинальный ) DSL, а не его жалкое подобие - не комплексы

anonymous
()
Ответ на: комментарий от anonymous

Ты скобки даже в русском языке ставить не можешь. Печально.

По теме.

Решение должно быть максимально простым, эффективным и быстро имплементироваться.

Вот автор занимался онанизмом месяц или около того вместо того, чтоб просто взять и сделать (равно «взять и решить задачу»). И даже создал тему на лоре: «Смотрите, я надрачивал месяц или около парсер». Так и просит приз специальной олимпиады.

Плохого в компромисах абсолютно ничего нет. Сделать синтаксис DSL чуть более удобным для написания eDSL — ничего плохого нет в этом, если это не приведёт к резкому увелчению времени написания кода на eDSL.

Rzhepish
()
Ответ на: комментарий от Rzhepish

Решение должно быть максимально простым, эффективным и быстро имплементироваться.

ну, если заниматься мастурбацией аки лисперы и писать DSL для себя же любимых, - то да, все хорошо; а еще можно обзывать всех закомплексованными и говорить, что оригинальный синтаксис - говно, и вы просто не понимаете красоты скобочек

anonymous
()
Ответ на: комментарий от anonymous

не, ну а че, написать реализацию bash со скобочками, или SQL, или Wiki, или вообще новый DSL со скобочками - люди сразу оценят, ведь за пределами ЯП, которым пользуется программист, жизни нет

anonymous
()
Ответ на: комментарий от anonymous

в коммон лиспе можно почти любой синтаксис прикрутить к eDSL, сюрприз. Только вот это нахер никому не нужно обычно.

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

в коммон лиспе можно почти любой синтаксис прикрутить к eDSL, сюрприз

а я ведь не зря просил рабочий пример, сюрприз

Только вот это нахер никому не нужно обычно.

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

anonymous
()
Ответ на: комментарий от anonymous

Любой биологической субстанции обидно, когда она затратила много энергии, а профита получилось мало. Лиспер тратит много сил на изучение, его посылают в жопу, срабатывает вышеописанный принцип.

kiverattes ★☆
() автор топика
Ответ на: комментарий от anonymous

Сначала освой скобочки в русском языке, потом пойми, что синтаксис не нужно ставить во главу всего, а после уже можешь рассуждать про пробельные символы, скобочки и eDSL.

Rzhepish
()
Ответ на: комментарий от KblCb

Железо сейчас быстрое, особо можно не париться. Вон люди вообще на питоне пишут и не ноют о скорости. Да и задачи есть разные.

Rzhepish
()
Ответ на: комментарий от kiverattes

> Любой биологической субстанции обидно, когда она затратила много энергии, а профита получилось мало.

Месяц или около того на один парсер. Много энергии, профита нет. Тебе обидно?

Rzhepish
()
Ответ на: комментарий от kiverattes

Лиспер тратит много сил на изучение, его посылают в жопу, срабатывает вышеописанный принцип.

Вставь вместо «лиспер» себя любимого и получи уже удовольствие, «яка країна, такий і 'ВРИО КО'» :)

yyk ★★★★★
()
Ответ на: комментарий от Rzhepish

Сначала освой скобочки в русском языке

повтори еще 20 раз, если больше аргументов нет

синтаксис не нужно ставить во главу всего

ну ты хоть понимаешь, какую чушь несешь? у ТС задача реализовать парсер, не знаю для DSL или нет, но есть такая задача, предположим это банальный SQL, тут заявляются лисперы и говорят - «синтаксис не нужно ставить во главу всего», нахер SQL, у нас на макросах можно наклепать его подобие, или даже оригинал, но оно нахер не нужно и никто так не делает, так что будем клепать что-то скобочкообразное, п%ц

а после уже можешь рассуждать про пробельные символы, скобочки и eDSL.

больше аргументов нет (с)

anonymous
()
Ответ на: комментарий от anonymous

Окстись, убогий, при проектировании языка (eDSL/DSL) парсер — маленькая деталька, не самая сложная и не сама в себе.

Задача в итоге поиметь готовый инструмент, решающий задачу, решение должно минизировать затреченно время и максимизировать профит. Неужели это сложно понять?

Ещё один вопрос. Какие у тебя конкретно претензии к скобкам? Что тебе не понятно? Против чего ты выступаешь вообще?

Rzhepish
()
Ответ на: комментарий от anonymous

И отучись говорить за ТС. Он сам скажет, в чём была у него задача. Может он хотел долгий секс и какой-никакой а экспириенс получить, а парсер — орех, который он хотел расколоть.

Rzhepish
()
Ответ на: комментарий от Rzhepish

Окстись, убогий

сосни хуйцов

при проектировании языка (eDSL/DSL) парсер — маленькая деталька, не самая сложная и не сама в себе.

парсер к проектированию ЯП вообще отношения не должен иметь, это только лисперы на данном этапе уже трут потные ладони, предвкушая использование своего ЯП хоть где-нибудь

Задача в итоге поиметь готовый инструмент, решающий задачу, решение должно минизировать затреченно время и максимизировать профит. Неужели это сложно понять?

задачу тебе уже озвучили - написать DSL по спецификации, DSL придуман не для тебя, а для инженера, админа и пр., решай задачу на чем хочешь, но пойми уже простую вещь - лисп ради лиспа нахрен не нужен

Ещё один вопрос. Какие у тебя конкретно претензии к скобкам?

такие, что синтаксис - важен, как бы фанатам одного ЯП не хотелось обратного

anonymous
()
Ответ на: комментарий от Rzhepish

И отучись говорить за ТС.

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

anonymous
()
Ответ на: комментарий от anonymous

> парсер к проектированию ЯП вообще отношения не должен иметь, Киса, ты меня смешиш. При проектировании ЯП и DSL должны учитываться такие вещи, как реализуемость, сложность и затраты на реализацию. Не понимаешь простых вещей - ПНХ.

> задачу тебе уже озвучили - написать DSL по спецификации

Паяц, сколько громких слов, а выхлопа нет. Озвучь спецификацию, интересно посмотреть на задачу.

> DSL придуман не для тебя, а для инженера,

Почему в CAD'ы интегряют лиспо-подобные DSL?

> но пойми уже простую вещь - лисп ради лиспа нахрен не нужен

Ну что ты д#*#ался до меня со своим ЛNСПом, да ещё так уныло. Где я что-то писал про лисп?

Откуда такая лютая, всепоглощающая ненависть к лиспу?

Rzhepish
()
Ответ на: комментарий от Rzhepish

Паяц, сколько громких слов, а выхлопа нет. Озвучь спецификацию, интересно посмотреть на задачу.

сразу предпрежу - в следующий раз буду оскорблять в ответ, решай сам, насчет спецификации - ты совсем ослеп? я минимум два варианта пример - bash script и SQL

Почему в CAD'ы интегряют лиспо-подобные DSL?

внезапно, туда интегряют(с) не только лиспо-подобные DSL

Ну что ты д#*#ался до меня со своим ЛNСПом, да ещё так уныло

скобочки (с)

Откуда такая лютая, всепоглощающая ненависть к лиспу?

извиняюсь за лурк, но в тему:

http://lurkmore.to/Вы_просто_ненавидите_всё_русское

anonymous
()
Ответ на: комментарий от anonymous

> сразу предпрежу - в следующий раз буду оскорблять в ответ, решай сам,

Будешь перегибать палку — твои сообщения потрут до того, как я отвечу. Решай сам

> насчет спецификации - ты совсем ослеп? я минимум два варианта пример - bash script и SQL

Это не спецификация. Это задача ради задачи, а именно задача — троллить на лоре.

> внезапно, туда интегряют(с) не только лиспо-подобные DSL

И что? Инженеры возмут и сделают, и пофиг на то, как писать: (sin x) или sin(x). Разговор ни о чём.

> извиняюсь за лурк, но в тему:

И причем здесь скобочки и твоя ненависть к ним?

Rzhepish
()
Ответ на: комментарий от Rzhepish

Будешь перегибать палку — твои сообщения потрут до того, как я отвечу

напугал :)

Это не спецификация. Это задача ради задачи, а именно задача — троллить на лоре.

это как раз пример реальной задачи, спецификацию на тот же SQL найдешь сам, а вот заявится в топик и заявить, не зная задачи, что нахрен оно не нужно - есть eDSL на все случаи жизни, вот этот и есть троллинг

И что? Инженеры возмут и сделают, и пофиг на то, как писать: (sin x) или sin(x). Разговор ни о чём.

еще раз - ты ставишь реализацию во главу угла, далеко не всем нравится синтаксис "(sin x)"

И причем здесь скобочки и твоя ненависть к ним?

притом, что нет никакой ненависти - есть реакция на массу назойливых предложений их использовать в купе с лиспом, я говорю, что мне синтаксис важен и я предпочитаю другие ЯП, меня в ответ спрашивают - за что я так люто ненавижу лисп и скобочки

anonymous
()
Ответ на: комментарий от anonymous

> я говорю, что мне синтаксис важен и я предпочитаю другие ЯП

Импритинг что-ли?

> за что я так люто ненавижу лисп и скобочки

В этой теме от тебя чуть ли не половина сообщений с фекалиями в сторону лиспа.

> еще раз - ты ставишь реализацию во главу угла, далеко не всем нравится синтаксис "(sin x)"

Приехали, я несколько раз писал, что задачу разработки eDSL решать нужно комплексно. И нужно обязательно учитывать сложность реализации всех сабкомпонент. Велосипеды строить не нужно, если можно взят готовое решение. Скажешь не писал?

Нравится/ненравится — это вообще личный и субъективный момент. Вот мне не нравятся китайцы и их культура, и производимый ими üбер-низкокачественный хлам. И что? Я же не кричу об этом и не пишу, покупайте всё некитайское, китайцы — зло.

> это как раз пример реальной задачи, спецификацию на тот же SQL найдешь сам, а вот заявится в топик и заявить, не зная задачи, что нахрен оно не нужно

Наоборот. Заявиться и требовать писать SQL-like/BASH-like DSL, не зная задачи — вот это троллинг.

Rzhepish
()

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

в firefox javascript парсер ручной в v8 ручной компиляторы С/C++ практически все в ручную написаны, в том числе GCC

CodeSourcery has received a contract to implement a brand-new recursive-descent C++ parser, replacing the YACC version in the compiler at present.

This work will have the following benefits: - Full language conformance - Better error-messages - Better error-recovery - Simplification of many parts of the compiler that presently do funny things to work around oddities in the parser.

Вообщем, зависит от задач и грамматики языка

anatolat
()
Ответ на: комментарий от Rzhepish

В этой теме от тебя чуть ли не половина сообщений с фекалиями в сторону лиспа.

«За что вы так ненавидите» (с) - фекалии у тебя в мозгах, раз ты не понимаешь, что универсального решения на все случаи нет, и ты продолжаешь доказывать обратное, в общем разговор окончен - конструктива тут не будет

anonymous
()
Ответ на: комментарий от anonymous

> что универсального решения на все случаи нет

Вот это неадекват.

Тебе пишут, нужно решать задачи, подходить комплексно, оценить в том числе затраты на имплементацию (и скорость разработки), использования и о компромиссах, о минимазации времени на имплементацию и максимазации «профита»

Это универсальное решение — подумать и сделать. Просто и быстро.

От тебя вижу ссылки на луркмор и прочую редятину. Молодец, видно старался, да не вышло ничего.

Rzhepish
()
Ответ на: комментарий от Rzhepish

@anonymous - скобконенавистник. Как тебе такой синтаксис и дебаг этого DSL ?

Правда эти <::> просто няшечки??

Rzhepish
()
Ответ на: комментарий от kiverattes

Лиспер тратит много сил на изучение

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

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

> но всяко проще чем плюсы какие-нибудь

Это попытка начать новый срач?

Rzhepish
()
Ответ на: комментарий от unfo

Не, был выбран неверный инструмент (буст/спирит).

Только потому, что С++ и темплейтах можно такое сделать совсем не значит, что это нужно.

Промолчу про только что обсосанный популярный язык и eDSL, но даже flex/bison сделали жизнь легче (плавал, знаю)

Rzhepish
()

Попытка замутить лиспосрач без самих лисперов?!

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.