Как определить, является ли язык LL(1)?

У меня есть грамматика, и я могу проверить, является ли она LL(1) или нет. Однако есть ли способ проверить, является ли язык, сгенерированный грамматикой, LL(1)? И в чем именно разница между грамматиками LL(1) и языками LL(1)?


person Rakesh    schedule 20.08.2011    source источник
comment
Ваш вопрос, в чем разница между грамматикой и языком?   -  person Johan Kotlinski    schedule 20.08.2011


Ответы (1)


Любая грамматика языка LL(1) определяет язык LL(1). По определению, язык является LL(1), если существует некоторая грамматика, порождающая его, которая является LL(1), поэтому тот факт, что у вас есть грамматика LL(1) для языка, автоматически означает, что язык является LL(1) .

Чтобы уточнить, язык — это набор строк, а грамматика для этого языка — это средство описания этого языка. Некоторые языки имеют грамматики LL(1), а другие нет. Однако тот факт, что грамматика не является LL(1), не означает, что язык, который она описывает, не является таковым. Например, рассмотрим эту грамматику:

A -> ab | ac

Эта грамматика не является LL(1), потому что она содержит конфликт FIRST/FIRST при попытке предсказать результат для A при виде терминала a. Однако он описывает язык LL(1), так как язык также описывается грамматикой

A -> aX
X -> b | c

Таким образом, язык, созданный этими грамматиками (который содержит только ab и ac), действительно является LL(1).

Определить, является ли язык, описываемый произвольной грамматикой, языком LL(1), намного сложнее, и, насколько мне известно, единственный способ сделать это — либо явно указать грамматику LL(1) для языка, сгенерированного исходной грамматикой (что сложно) или математически доказать, что такой грамматики не существует.

Надеюсь это поможет!

person templatetypedef    schedule 20.08.2011
comment
Таким образом, LL(1) язык может быть определен рядом других грамматик, которые не являются LL(1) (пока существует такая LL(1)-грамматика )? -- Просто пытаюсь подтвердить в своей голове. - person ; 20.08.2011
comment
@pst, да, достаточно одной грамматики LL(1). - person ; 20.08.2011