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

Ну, я раньше имел ту же проблему, и проблема была решена путем добавления слова" , возврат " прежде подтверждает:

onclick="return confirm('Delete entry?')"

мне жаль, что это не могло быть полезно для Вас..

Удачи!

8
задан SomeUser 4 October 2009 в 02:25
поделиться

10 ответов

Всегда полезно прочитать Книгу Дракона . Но имейте в виду, что если ваш язык нетривиален, на самом деле нет "короткого" способа сделать это.

11
ответ дан 3 November 2019 в 12:27
поделиться

Это скорее зависит от вашего языка. Некоторые очень простые языки требуют очень небольшого анализа, поэтому их можно кодировать вручную; другие языки используют генераторы PEG, такие как Rats! (PEG - это грамматика выражения синтаксического анализатора, которая находится между парсером Regex и LR) или обычные генераторы синтаксического анализатора, такие как Antlr и Yacc. Менее формальные языки требуют вероятностных методов, таких как грамматики ссылок .

5
ответ дан 3 November 2019 в 12:27
поделиться

Написать Парсер рекурсивного спуска . Иногда это проще, чем YACC / BISON, и обычно более интуитивно понятно.

4
ответ дан 3 November 2019 в 12:27
поделиться

YACC , существуют разные реализации для разных языков.

Удачи с вашим языком; -)

2
ответ дан 3 November 2019 в 12:27
поделиться

Я использовал GOLD Parsing System , потому что она казалась более простой в использовании, чем ANTLR для новичка вроде меня, но при этом достаточно -полнофункциональный для моих нужд. Веб-сайт включает документацию (включая инструкции по Написанию грамматик , что составляет половину работы), а также программное обеспечение .

2
ответ дан 3 November 2019 в 12:27
поделиться

Попробуйте Bison для синтаксического анализа и Flex для лексирования

Определение bison вашего языка имеет форму контекста- свободная грамматика . Википедия по этой теме довольно хороша, и, вероятно, с нее можно начать.

2
ответ дан 3 November 2019 в 12:27
поделиться

У Дугласа Крокфорда есть доступный пример парсера, написанного на JavaScript .

3
ответ дан 3 November 2019 в 12:27
поделиться

Резюме: самый короткий, вероятно, Antlr.

Заманчиво обратиться к Книге Дракона, чтобы узнать о теории синтаксического анализа. Но я не думаю, что у вас и у Книги Дракона такое же представление о том, что означает «теория». В Dragon Book описывается, как создавать рукописные парсеры, генераторы парсеров и т. Д., Но вы почти наверняка захотите использовать вместо этого инструмент для генерации парсеров.

Некоторые люди предлагали Bison и Flex (или их более старые версии Yacc и Lex ). Это старые приверженцы, но они не очень удобные инструменты. Их документация сама по себе неплоха, просто она не совсем помогает справиться с случайной сложностью их использования. Их внутренние данные плохо инкапсулированы, и с ними очень сложно что-то продвинуть. Например, в phc у нас все еще нет правильных номеров строк, потому что это очень сложно. Они стали лучше, когда мы изменили грамматику, добавив в нее операторы No-op, но это невероятный прием, в котором не должно быть необходимости.

Якобы Bison и Flex работают вместе, но интерфейс неудобен. Хуже того, существует множество версий каждой, которые хорошо работают только с некоторыми конкретными версиями другой. И последнее, что я проверил, по крайней мере, документация о том, какие версии идут с какими, была довольно скудной.

Написание парсера с рекурсивным спуском несложно, но может быть утомительным. Antlr может сделать это за вас, и это, кажется, неплохой набор инструментов, с тем преимуществом, что то, что вы изучаете в этом проекте, можно применить ко многим другим языкам и платформам (Antlr очень портативен). Есть также множество существующих грамматик, из которых можно учиться.

Непонятно, на каком языке вы работаете, но некоторые языки имеют отличные фреймворки для синтаксического анализа. В частности, Haskell Parsec Library кажется очень элегантной. Если вы используете C ++, у вас может возникнуть соблазн использовать Spirit . Мне было очень легко начать с ним, и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.

Короче говоря: Antlr, если у вас нет очень веской причины.

re, но в некоторых языках есть отличные фреймворки для синтаксического анализа. В частности, Haskell Parsec Library кажется очень элегантной. Если вы используете C ++, у вас может возникнуть соблазн использовать Spirit . Мне было очень легко начать с ним, и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.

Короче говоря: Antlr, если у вас нет очень веской причины.

re, но в некоторых языках есть отличные фреймворки для синтаксического анализа. В частности, Haskell Parsec Library кажется очень элегантной. Если вы используете C ++, у вас может возникнуть соблазн использовать Spirit . Мне было очень легко начать с ним, и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.

Короче говоря: Antlr, если у вас нет очень веской причины.

и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.

Короче говоря: Antlr, если у вас нет очень веской причины.

и сложно - но все же возможно - делать с ним сложные вещи. Это соответствует моему опыту работы с C ++ в целом. Я сказал, что мне было легко начать, но тогда я уже написал пару парсеров и изучил синтаксический анализ в классе компилятора.

Короче говоря: Antlr, если у вас нет очень веской причины.

11
ответ дан 3 November 2019 в 12:27
поделиться

Использование генератора синтаксического анализатора для вашего основного языка - самый быстрый способ, в сочетании с теорией синтаксического анализа из такой книги, как Dragon Book или Современная конструкция компилятора в {C, Серия ML}.

Если вы используете C, yacc и версия GNU bison являются стандартными генераторами. Насколько мне известно, Antlr широко используется во многих языках, поддерживая Java, C # и C ++. Есть также много других почти на любом языке.

В настоящее время мне больше всего нравится Menhir , отличный генератор парсеров для OCaml. Диалекты языков в стиле ML (Ocaml, Standard ML и т. Д.) В целом очень хороши для создания компиляторов и интерпретаторов.

1
ответ дан 3 November 2019 в 12:27
поделиться

ANTLR - самый простой способ для тех, кто не знает теории компиляторов, потому что:

  • ANTLRWORKS (визуальный анализ и отладка AST)

  • Книга ANTLR (без теории компилятора требуется фон)

  • Только 1 синтаксис для лексера и парсера.

1
ответ дан 3 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: