it-roy-ru.com

Примеры грамматик LL (1), LR (1), LR (0), LALR (1)?

Есть ли в сети хороший ресурс с коллекцией грамматик для некоторых основных алгоритмов синтаксического анализа (LL (1), LR (1), LR (0), LALR (1))? Я нашел много отдельных грамматик, попадающих в эти семейства, но я не знаю ни одного хорошего ресурса, где бы кто-нибудь написал большой набор примеров грамматик.

Кто-нибудь знает о таком ресурсе?

55
templatetypedef

Техника синтаксического анализа - Практическое руководство содержит несколько примеров (то есть, вероятно, полдюжины или около того для каждого типа) почти каждого типа грамматики. Вы можете приобрести 2-е издание книги, хотя 1-е издание доступно бесплатно на сайте автора в форме PDF (внизу) ссылки).

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

Примечание: все эти грамматики малы (менее двух десятков правил), потому что это очевидно опубликованная книга.

19
Jason Moore

Примеры из википедии

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

Вы также можете посмотреть на

36
Prashant Bhate

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

У вас может быть шанс найти генераторы синтаксических анализаторов, которые соответствуют каждому семейству (например, LL (1)), и искать экземпляры входных данных для этого генератора синтаксического анализатора, каждый из которых будет LL (1): определение. Например, грамматики ANTLR - это все различные версии LL (k) в зависимости от того, какую версию ANTLR вы выберете (описание версии ANTLR покажет, какой k он принимает); Все грамматики бизонов - LALR (1) [игнорируя недавнюю опцию GLR]. Если вы зайдете на мой сайт (см. Биографию), вы увидите список грамматик, которые в значительной степени не зависят от контекста (то есть, ни в одном из описанных вами классов).

Правка: Обратите внимание на разъяснение @Bart Kier о том, что ANTLR может явно пометить грамматику как LL (k) для конкретного k.

2
Ira Baxter