Про парсеры

Блог Всячепуза
 

Категория:ParserGenerators

Материал из My Gentoo Wiki

ANTLR

Материал из My Gentoo Wiki
Перейти к: навигация, поиск

ANother Tool for Language Recognition

Типы используемых алгоритмов[править]

В основе ANTLR 4 лежит ALL(*)-алгоритм adaptive LL(*) который переносит анализ грамматики на время исполнения

для ANTRL3 использовался LL(*)

adaptive algorithm is much stronger than the static LL(*) grammar analysis algorithm in v3

Типы используемых "механизмов"[править]

ANTLR automatically can build parse trees for you and generate listeners and visitors. This is not only a huge productivity win, but also an important step forward in building grammars that don't depend on embedded actions. If we keep all of the actions out of the grammar and put them into external visitors, we can reuse the same grammar to generate code in any language for which we have an ANTLR target.

The biggest problem for the average practitioner is that most parser generators do not produce code you can load into a debugger and step through. This immediately removes bottom-up parser generators and the really powerful GLR parser generators from consideration by the average programmer.

понимаемые грамматики[править]

EBNF - https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form

целевые языки[править]

  • C++
  • Java
  • C#
  • Python
  • Ruby

Ссылки[править]

Коммьюнити[править]

Terence Parr = мейнтейнер, профессор в University of San Francisco.

v4 is the culmination of 25 years of research into parsers and parser generators.

Поэтому когда вам кто-то говорит (а мне говорили), что распарсить что-то может любой студент за час... Ну может, если вы ему методику предоставите (и я распарсил, GOLD-парсером, за час, только они с ним запарились ПОТОМ).

Как устанавливать[править]

Есть пакет dev-java/antlr-4.4, номер последней версии можно посмотреть на http://gpo.zugaina.org/Search?search=antlr

Ссылаться на строчки из ebuild-файла можно тут - https://github.com/gentoo/gentoo/tree/master/sys-devel/bison

Команды на установку:

emerge antlr
cave resolve antlr
equo i antlr

Ограничения[править]

ANTLR 4 deals with left recursion correctly (except for indirect left recursion, i.e. grammars rules x which refer to y which refer to x)

Лицензионные ограничения версии Antlr3 были убраны в Antrl4 - https://theantlrguy.atlassian.net/wiki/pages/viewpage.action?pageId=1900547

some languages are so complicated, such as C++, that parser generators might build parsers slower than compiler developers want. The compiler developers also like the control of a recursive-descent parser for predicating the parse to handle context-sensitive constructs such as T(i) in C++.

Bison

Материал из My Gentoo Wiki
Перейти к: навигация, поиск

Типы используемых алгоритмов[править]

  • LR
  • GLR

Типы используемых "механизмов"[править]

  • LR(1) parser tables (canonical)
  • LALR(1) parser tables.
  • IELR(1)

понимаемые грамматики[править]

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

целевые языки[править]

  • C
  • C++
  • Java

Ссылки[править]

Как устанавливать[править]

Есть пакет sys-devel/bison-3.0.4-r1, номер последней версии можно посмотреть на http://gpo.zugaina.org/Search?search=bison

Ссылаться на строчки из ebuild-файла можно тут - https://github.com/gentoo/gentoo/tree/master/sys-devel/bison

Команды на установку:

emerge bison
cave resolve bison
equo i bison

Eto.Parse

Материал из My Gentoo Wiki
Перейти к: навигация, поиск

Типы используемых алгоритмов[править]

LL(k)

Типы используемых "механизмов"[править]

Fluent API

понимаемые грамматики[править]

целевые языки[править]

  • C#

Ссылки[править]

Коммьюнити[править]

Curtis Wensley, Vancouver, BC Canada (https://github.com/cwensley), просто девелопер, к университетам вроде не относится

Как устанавливать[править]

Есть пакет dev-dotnet/eto-parse-1.4.0, номер последней версии можно посмотреть на http://gpo.zugaina.org/dev-dotnet/eto-parse

Команды на установку:

emerge layman
layman -L
layman -a dotnet
emerge eto-parse

Ограничения[править]

Если надо парсить грамматику с явными пробелами, то есть разница между использованием = и := в правилах EBNF.

Nitra

Материал из My Gentoo Wiki
Перейти к: навигация, поиск

Типы используемых алгоритмов[править]

Поддержка неоднозначных грамматик (когда две ветви спарсили одинаковый набор токенов). Автоматическое разрешение неоднозначностей.

Типы используемых "механизмов"[править]

uses PEGs The main feature of PEGs that allows this is that the ordered choice operator (|) - the correct parse depends on the order you specify alternations

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

Безлексерный парсер – позволяет легко разбирать языки с несколькими лексическими контекстами, такие как XML.

понимаемые грамматики[править]

https://confluence.jetbrains.com/display/Nitra/Syntax

(Nitra’s grammar syntax is highly reminiscent of BNF
Язык описания парсеров Nitra, в отличие от BNF, описывает также и AST.)

https://rsdn.ru/article/nitra/Nitra-doc5.xml

целевые языки[править]

?

Ссылки[править]

Коммьюнити[править]

?

Как устанавливать[править]

?

Ограничения[править]