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