1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
|
digit := "0" | "1" | "2" | "3" | "4" | "5" | "6"
| "7" | "8" | "9" ;
letter := "a" | "b" | "c" | "d" | "e" | "f" | "g"
| "h" | "i" | "j" | "k" | "l" | "m" | "n"
| "o" | "p" | "q" | "r" | "s" | "t" | "u"
| "v" | "w" | "x" | "y" | "z" | "A" | "B"
| "C" | "D" | "E" | "F" | "G" | "H" | "I"
| "J" | "K" | "L" | "M" | "N" | "O" | "P"
| "Q" | "R" | "S" | "T" | "U" | "V" | "W"
| "X" | "Y" | "Z" ;
under_score := "_" ;
ident := under_score | letter, { ( digit | letter ) } ;
visibility := "public" | "protected" | "private"
| "internal" ;
variability := "static" | "const" | "final" ;
behaviour := "synchronized" | "volatile" | "native" ;
modifier := visibility | variability | behaviour
| "abstract" | "weak" | "unowned"
| "owned" ;
primitive := "byte" | "int" | "int8"
| "int16" | "int32" | "int64"
| "uint" | "uint8" | "uint16"
| "uint32" | "uint64" | "float"
| "double" | "short" | "long"
| "char" | "string" | "bool"
| "boolean" | "size_t" | "ssize_t"
| "time_t" ;
param := primitive | ident, ident ;
stmt := visibility, [ variability ], primitive | "void" | ident, ident, "(", { param, "," }, ")" ; |