2013-03-23 2 views
3

грамматике для объявлений метода в Java что-то вроде следующего:Грамматика для объявления метода в Java

Java method declaration BNF:

method_declaration 
    ::= 
    { modifier } type identifier 
    "(" [ parameter_list ] ")" { "[" "]" } 
    (statement_block | ";") 

И мне интересно, что делают квадратные скобки означают.

  1. Может ли кто-нибудь привести мне пример?
  2. Является ли декларация метода на Java выше (что касается дженериков)?
  3. Где я могу найти полную и актуальную грамматику BNF для Java?
+0

Связанная страница с 1996 года ... давным-давно, и сомнительный источник – PeterMmm

+0

Я знаю, так где я могу найти полную и актуальную грамматику BNF для Java? – midas

+2

Единственный допустимый источник: http://docs.oracle.com/javase/specs/jls/se7/html/jls-18.html – PeterMmm

ответ

5

Квадратные скобки означают, что метод возвращает массив. Например, вы можете написать метод, который возвращает массив междунар как:

int method()[] { … } 

Многие люди не знакомы с этим синтаксисом, хотя, и это лучше избегать.

Вы найдете полный синтаксис Java-здесь: http://docs.oracle.com/javase/specs/jls/se7/html/jls-18.html

+0

и этот путь тоже: method_declaration :: = {modifier} type {"[ ""] "} идентификатор " ("[parameter_list]") "{" [""] "} (statement_block |"; ") – PeterMmm

+0

Это излишне, Питер; тип возвращаемого значения уже позволяет указать тип массива. – Joni

0

Скобки используется для возвращаемых типов быть массивы, например:

Sting myMethodThatRetrunsStringArray[] { 
//Implementation 
// return a String array 
} 
0

мы говорим, что лексема} к справа от {токена, хотя и появляется, в этом двумерном представлении, вниз и слева от {токена. Это соглашение об использовании слов слева и справа позволяет говорить, например, о правом операнде двоичного оператора или левой части присваивания.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-2.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html

1

{ ... } стенды для 0..* (ноль или более раз)

дженериков не хватает, потому что документ, который вы связаны 17 лет.

Официальный Java Language Specification использует этот конкретный синтаксис: http://docs.oracle.com/javase/specs/jls/se7/html/jls-2.html#jls-2.4

Я не смог найти настоящую грамматику BNF для Java, который является менее устаревшим, чем ваша.

3

Это устаревшая конструкция. Из JLS (§8.4. Method Declarations):

Для совместимости с более старыми версиями платформы Java SE, объявление метода, который возвращает массив допускается размещение (некоторые или все) пустые пары скобок, которые образуют объявление типа массива после списка формальных параметров. Это подтверждается следующим устаревшим производством, но не должно использоваться в новом коде.

MethodDeclarator: 
    MethodDeclarator [ ] 

Таким образом, это действительно Java (хотя я никогда не видел эту конструкцию, используемую в реальном коде).

Что касается грамматики, которую вы цитируете, это кажется неполным. Например, он, как представляется, не включает необязательный пункт throws. Кроме того, он позволяет только одну пару квадратных скобок в method_declaration, тогда как официальная грамматика допускает любое количество таких пар.

Определяющим этапом является спецификация языка Java, Chapter 18. Syntax.