LL грамматика - LL grammar
В формальная теория языка, LL грамматика это контекстно-свободная грамматика это может быть разбирается по LL парсер, который анализирует ввод из Lвправо и строит Lсамый последний вывод предложения (отсюда LL по сравнению с Парсер LR который строит самый правый вывод). Язык с грамматикой LL известен как Язык LL. Они образуют подмножества детерминированные контекстно-свободные грамматики (DCFG) и детерминированные контекстно-свободные языки (DCFL) соответственно. Один говорит, что данная грамматика или язык «является грамматикой / языком LL» или просто «является LL», чтобы указать, что он находится в этом классе.
Парсеры LL - это анализаторы на основе таблиц, похожие на парсеры LR. Грамматики LL в качестве альтернативы можно охарактеризовать как точно такие, которые могут быть проанализированы предиктивный синтаксический анализатор - а парсер рекурсивного спуска без возврат - и их можно легко написать от руки. Эта статья посвящена формальным свойствам грамматик LL; для разбора см. LL парсер или же парсер рекурсивного спуска.
Формальное определение
Конечный случай
Учитывая натуральное число , а контекстно-свободная грамматика является LL (k) грамматика если
- для каждой строки терминального символа длиной до символы
- для каждого нетерминального символа , и
- для каждой строки терминального символа ,
существует не более одного производственного правила так что для некоторых строк терминальных символов ,
- Струна может быть получено из начального символа ,
- может быть получено из после первого применения правила , и
- первый символы и из согласны.[2]
Альтернативное, но эквивалентное формальное определение следующее: является LL (k) грамматика если для произвольных выводов
когда первый символы согласен с теми из , тогда .[3][4]
Неформально, когда парсер получил , с крайний левый нетерминал и уже израсходован из ввода, затем, посмотрев на это и глядя на следующий символы текущего ввода, синтаксический анализатор может с уверенностью идентифицировать производственное правило за .
Когда идентификация правила возможна даже без учета прошлого ввода , то грамматика называется сильная LL (k) грамматика.[5] В формальном определении сильной ЛЛ (k) грамматика, универсальный квантор для опущено, и добавляется к квантификатору "для некоторых" для .Для каждого LL (k) грамматика, структурно эквивалентная сильная LL (k) грамматика может быть построена.[6]
Класс LL (k) языков образует строго возрастающую последовательность множеств: LL (0) LL (1) ⊊ LL (2) ⊊….[7] Разрешаемо ли данная грамматика грамм является LL (k), но не разрешимо, является ли произвольная грамматика LL (k) для некоторых k. Также разрешимо, если заданный LR (k) грамматика также является LL (м) грамматика для некоторых м.[8]
Каждый LL (k) грамматика также является LR (k) грамматика. An ε-свободная грамматика LL (1) также является грамматикой SLR (1). Грамматика LL (1) с символами, имеющими как пустые, так и непустые производные, также является грамматикой LALR (1). Грамматика LL (1) с символами, имеющими только пустое происхождение, может быть или не быть LALR (1).[9]
В грамматиках LL не может быть правил, содержащих левая рекурсия.[10] Каждый LL (k) грамматика, свободная от ε, может быть преобразована в эквивалентную LL (k) грамматика в Нормальная форма Грейбаха (который по определению не имеет правил с левой рекурсией).[11].
Обычный случай
Позволять быть конечным алфавитом. Подмножество это обычный набор если это обычный язык над . А раздел из называется обычный раздел если для каждого набор регулярно.
Позволять быть контекстно-свободной грамматикой и позволить быть регулярным разделом . Мы говорим что является LL () грамматика если для произвольных выводов
такой, что следует, что . [12]
Грамматика грамм называется LL-регулярным (LLR), если существует регулярное разбиение такой, что грамм является LL ().
Грамматики LLR не обязательно неоднозначны и не леворекурсивны.
Каждый LL (k) грамматика является LLR. Каждый LL (k) грамматика детерминирована, но существует недетерминированная грамматика LLR.[13] Следовательно, класс грамматик LLR строго больше, чем объединение LL (k) для каждого k.
Разрешимо ли, учитывая регулярное разбиение , данная грамматика является LL (). Однако не разрешимо, является ли произвольная грамматика грамм это LLR. Это связано с тем, что при решении вопроса о грамматике грамм генерирует обычный язык, который потребуется, чтобы найти регулярный раздел для грамм, можно свести к Проблема с почтовой корреспонденцией.
Каждая грамматика LLR является LR-регулярной (LRR, соответствующий эквивалент для LR (k) грамматики), но существует LR (1) грамматика, которая не является LLR.[14]
Исторически грамматики LLR последовали за изобретением грамматик LRR. Для регулярного разбиения a Машина Мура может быть сконструирован так, чтобы преобразовывать синтаксический анализ справа налево, идентифицируя экземпляры обычного производства. Как только это будет сделано, анализатора LL (1) будет достаточно для обработки преобразованного ввода за линейное время. Таким образом, парсеры LLR могут обрабатывать класс грамматик, строго превышающий LL (k), будучи одинаково эффективными, несмотря на то, что теория LLR не имеет серьезных приложений. Одна возможная и очень правдоподобная причина заключается в том, что, хотя существуют генеративные алгоритмы для LL (k) и LR (k), проблема генерации парсера LLR / LRR неразрешима, если заранее не построить регулярный раздел. Но даже проблема построения подходящего регулярного разбиения по заданной грамматике неразрешима.
Простые детерминированные языки
Контекстно-свободная грамматика называется простой детерминированный,[15] или просто просто,[16] если
- он находится в Нормальная форма Грейбаха (т.е. каждое правило имеет вид ), и
- разные правые части для одного и того же нетерминала всегда начинайте с разных терминалов .
Набор строк называется простым детерминированным или просто простым языком, если он имеет простую детерминированную грамматику.
Класс языков, имеющих ε-свободную LL (1) грамматику в нормальной форме Грейбаха, равен классу простых детерминированных языков.[17]В этот языковой класс входят регулярные множества, не содержащие ε.[16] Эквивалентность для него разрешима, а включение - нет.[15]
Приложения
Грамматики LL, особенно грамматики LL (1), представляют большой практический интерес, поскольку их легко анализировать либо анализаторами LL, либо синтаксическими анализаторами рекурсивного спуска, и много компьютерные языки[уточнить ] по этой причине разработаны как LL (1). Языки, основанные на грамматиках с высоким значением k традиционно считались[нужна цитата ] быть трудным для синтаксического анализа, хотя сейчас это не так, учитывая доступность и широкое использование[нужна цитата ] генераторов парсеров, поддерживающих LL (k) грамматики для произвольных k.
Смотрите также
- Сравнение генераторов парсеров для списка парсеров LL (k) и LL (*)
Примечания
- ^ Керниган и Ричи 1988, Приложение A.13 «Грамматика», стр.193 и далее. В верхней части изображения показан упрощенный отрывок в EBNF -подобное обозначение ..
- ^ Розенкранц и Стернс (1970, п. 227). Def.1. Авторы дела не рассматривают k=0.
- ^ куда ""обозначает выводимость крайними левыми выводами, а , , и
- ^ Уэйт и Гус (1984), п. 123) Защ. 5,22
- ^ Розенкранц и Стернс (1970, п. 235) Защита 2
- ^ Розенкранц и Стернс (1970, п. 235) Теорема 2.
- ^ Розенкранц и Стернс (1970, п. 246-247): Использование ""обозначать" или ", набор строк имеет , но нет ε-свободных грамматика, для каждого .
- ^ Розенкранц и Стернс (1970, стр. 254–255).
- ^ Битти (1982)
- ^ Розенкранц и Стернс (1970, с. 241) Лемма 5
- ^ Розенкранц и Стернс (1970, п. 242) Теорема 4.
- ^ Поплавский, Дэвид (1977). «Свойства LL-регулярных языков». Университет Пердью. Цитировать журнал требует
| журнал =
(помощь) - ^ Дэвид А. Поплавски (август 1977 г.). Свойства LL-регулярных языков (Технический отчет). Университет Пердью, Департамент компьютерных наук.
- ^ Дэвид А. Поплавски (август 1977 г.). Свойства LL-регулярных языков (Технический отчет). Университет Пердью, Департамент компьютерных наук.
- ^ а б Кореняк и Хопкрофт (1966)
- ^ а б Хопкрофт и Ульман (1979), п. 229) Упражнение 9.3.
- ^ Розенкранц и Стернс (1970, п. 243)
Источники
- Битти, Дж. К. (1982). «О связи между грамматиками LL (1) и LR (1)» (PDF). Журнал ACM. 29 (4 (октябрь)): 1007–1022. Дои:10.1145/322344.322350.
- Хопкрофт, Джон Э .; Ульман, Джеффри Д. (1979). Введение в теорию автоматов, языки и вычисления. Эддисон-Уэсли. ISBN 978-0-201-02988-8.
- Керниган, Брайан В .; Ричи, Деннис М. (апрель 1988 г.). Язык программирования C. Серия программного обеспечения Prentice Hall (2-е изд.). Englewood Cliffs / NJ: Prentice Hall. ISBN 978-013110362-7.
- Кореняк, А.Дж .; Хопкрофт, Дж. Э. (1966). «Простые детерминированные языки». IEEE Conf. Рек. 7-я Энн. Symp. по теории коммутации и автоматов (SWAT). IEEE Pub. №16-С-40. С. 36–46. Дои:10.1109 / SWAT.1966.22.
- Parr, T .; Фишер, К. (2011). "LL (*): основа генератора синтаксического анализа ANTLR" (PDF). Уведомления ACM SIGPLAN. 46 (6): 425–436. Дои:10.1145/1993316.1993548.
- Rosenkrantz, D. J .; Стернс, Р. Э. (1970). «Свойства детерминированных грамматик сверху вниз». Информация и контроль. 17 (3): 226–256. Дои:10.1016 / с0019-9958 (70) 90446-8.
- Уэйт, Уильям М .; Гус, Герхард (1984). Конструкция компилятора. Тексты и монографии по информатике. Гейдельберг: Springer. ISBN 978-3-540-90821-0.
дальнейшее чтение
- Сиппу, Сеппо; Сойсалон-Сойнинен, Эльяс (1990). Теория синтаксического анализа: анализ LR (k) и LL (k). Springer Science & Business Media. ISBN 978-3-540-51732-0.