Как создать абстрактное синтаксическое дерево

Я думаю для Ваших скромных требований, просто необходимо кодировать сервлеты или простые jsp страницы, которым можно служить с сервера Tomcat. Я не думаю, что Вам нужен любой вид веб-платформы (как распорки) для персональных данных веб-сайта

64
задан neuromancer 12 November 2009 в 11:24
поделиться

1 ответ

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

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

Чтобы построить дерево синтаксического анализа из грамматики и выражения, вам сначала нужно преобразовать вашу грамматику в рабочий код. Обычно вы разделяете работу на токенизатор, который разделяет входной поток, представляющий выражение, на список токенов, и синтаксический анализатор, который берет список токенов и строит из него дерево разбора \ ast.

Таким образом, выражение 1 + 2 * (3 + 4) можно разбить на список токенов, например:

1 - int
+ - add_operator
2 - int
* - mul_operator
( - lparen
3 - int
+ - add_operator
4 - int
) - rparen

Первый столбец - это фактическое текстовое значение. Второй представляет тип токена. Эти токены передаются в синтаксический анализатор, который построен на основе вашей грамматики и распознает токены и строит дерево синтаксического анализа.

Итак, как написать лексический токенизатор и фактический синтаксический анализатор? Вы можете скрутить собственное вручную. Или, что чаще, используйте генератор парсеров, например coco, antlr или lex / yacc. Эти инструменты берут описание вашей грамматики и генерируют код для токензатора и парсера. (Генераторы кода существуют для большинства популярных языков, а также для некоторых непопулярных.)

Как вы создаете свой синтаксический анализатор, во многом зависит от того, какой язык вы используете. Написание синтаксического анализатора на Haskell полностью отличается от того, как, скажем, в C.

  • Here ' анализатор спуска .

  • Coco - генератор синтаксического анализатора для различных языков, который также поставляется с документацией о том, как начать.

  • Если вам нравится Python, то pyparsing , возможно, для вас.

42
ответ дан 24 November 2019 в 16:01
поделиться
Другие вопросы по тегам:

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