2014-01-31 1 views
0

Я отчаянно ищу Java-грамматику, которая может гарантировать, что это LR (1). Мне все равно, какая версия Java; Я должен иметь возможность изменить его до версии, которую я хочу.Любая рабочая грамматика L (AL) R для Java

Я читаю последнюю главу спецификации языка Java ™, второе издание. И черт, грамматика в этой главе, кажется, вовсе не LR (1). У меня такое чувство, что грамматика является циклической или несколько странной, так как я продолжаю получать конфликты с уменьшением сдвига, когда пытаюсь создать таблицу синтаксиса из грамматики.

Может ли кто-нибудь дать некоторые предложения по этому поводу?

Примечание: Отредактировано название для L (AL) R, так как я согласен принимать грамматику LALR для Java.

+1

[Это может помочь.] (Http://www.eclipse.org/jdt/core/howto/generate%20parser/generateParser.html) –

+0

Посмотрите на ответ на этот вопрос: http: // stackoverflow. com/questions/8378521/are-c-sharp-and-java-grammars-lalrx –

+2

LR (1)? Ты уверен? В основном это приводит к гигантским таблицам парсера, не покупая ничего? Или вы просто хотите LALR (1)? –

ответ

3

В главе 19 Спецификации языка Java, версия 1.0 есть грамматика LALR (1) для Java. Этот документ можно найти во многих местах, выполнив поиск в Интернете по адресу «Спецификация java language 1.0». Эта глава исчезла во втором издании JLS, заменена грамматикой, которая (как вы уже указываете) не LR (1). Вот несколько рабочих связей до версии 1.0 спецификации:

Однако в отношении этой грамматики, это стоит читать this analysis by Trevor Jim, который указывает на то, что представленные грамматика неоднозначна. Неясно, можно ли вводить правила неоднозначности, не нарушая контекстно-свободный характер грамматики. Его вывод заключается в том, что вопрос о том, является ли Java контекстно-свободным языком, является открытым вопросом (хотя он считает, что это так).

Обратите внимание, что вышеприведенное применимо к Java 1.0. Я не верю, что более свежие версии Java-языка не имеют контекста. Как указано в this thread: «Ни C#, ни Java не являются контекстными, поскольку проверка правильности и последовательности использования переменной в определенной области, как известно, не является контекстно-свободным». Например, прямые ссылки (например, методы) не могут быть разрешены за один проход с КПК.

По крайней мере, они были живыми, когда я отправил этот ответ.

 Смежные вопросы

  • Нет связанных вопросов^_^