Примеры грамматик LL(1), LR(1), LR(0), LALR(1)?
есть ли хороший ресурс в интернете с коллекцией грамматик для некоторых основных алгоритмов синтаксического анализа(LL(1), LR(1), LR(0), LALR (1))? Я нашел много отдельных грамматик, которые попадают в эти семьи, но я не знаю хорошего ресурса, где кто-то написал большой набор примеров грамматик.
кто-нибудь знает такой ресурс?
3 ответов
Методы Анализа: Практическое Руководство имеет несколько примеров (т. е., вероятно, полдюжины или около того на тип) почти каждого типа грамматики. Вы можете приобрести 2-е издание книги, хотя 1-е издание доступно бесплатно на авторском сайт в формате PDF (в нижней части ссылки).
У автора также есть некоторые тестовые грамматики, которые он связывает со своими примерами кода из второго издания, которые можно найти здесь.
Примечание: все эти грамматики малы (менее пары десятков правил), из-за того, что это, очевидно, опубликованная книга.
примеры из Википедии
LL (1)
грамматика
S -> F
S -> ( S + F )
F -> a
вход
( a + a )
разбор шагов
S -> "(" S "+" F ")"
-> ( "F" + F )
-> ( "a" + F )
-> ( a + "a" )
LR (0)
грамматика
(1) E → E * B
(2) E → E + B
(3) E → B
(4) B → 0
(5) B → 1
вход
1 + 1
парсинг шаги
need to build a parser table and traverse through states.
LR (1)
грамматика
S’ -> S S
S -> C C
C -> c C | d
вход
cd
разбор шагов
large table
LALR
грамматика
A -> C x A | ε
B -> x C y | x C
C -> x B x | z
вход
xxzxx
разбор шагов
traverse large parser table
вы также можете иметь посмотреть
Я не ожидал, что вы найдете большие коллекции грамматик, организованных таким образом специально. Что получит организатор взамен?
что у вас может быть шанс сделать, это найти генераторы парсера, соответствующие каждому семейству (например, LL(1)), и пойти искать экземпляры входов для этого генератора парсера, все из которых будут LL(1) по определению. Например, грамматики ANTLR - это все различные версии LL (k) в зависимости от того, какую версию ANTLR вы выбираете ( описание версии ANTLR покажет, что k она принимает); Bison грамматики все LALR (1) [игнорируя недавнюю опцию GLR]. Если вы зайдете на мой сайт (см. bio), вы увидите список грамматик, которые в значительной степени свободны от контекста (то есть не в любом из классов, которые вы описываете).
EDIT: обратите внимание на разъяснение @Bart Kier, что ANTLR может явно пометить грамматику как LL (k) для конкретного k.