‚܂ƂñŒ¾ŒêŽd—l
’è”
:= ”’l’è”
| •¶Žš’è”
;
”’l’è”
:= ®”’è”
| •‚“®¬”“_’è”
;
®”’è”
:= ‚P‚Oi”’è”
| ‚Wi”’è”
| ‚P‚Ui”’è”
;
•„†
:= ( '+' | '-' )
;
‚P‚Oi”’è”
:= ( ‚P‚Oi”’l - '0' ) ( ‚P‚Oi”’l | '_' )*
| '0'
;
‚Wi”’è”
:= '0' ‚Wi” ( ‚Wi” | '_' ) *
;
‚P‚Ui”’è”
:= ( "0x" | "0X" ) ‚P‚Ui” ( ‚P‚Ui” | '_' )*
;
•‚“®¬”“_’è”
:= ‚P‚Oi” ( ‚P‚Oi” | '_' )* '.' ( ‚P‚Oi” | '_' )+ ( 'e' | 'E' ) •„†? ( ‚P‚Oi” | '_' )+
| ‚P‚Oi”? ( ‚P‚Oi” | '_' )* '.' ( ‚P‚Oi” | '_' )+ ( ( 'e' | 'E' ) •„†? ( ‚P‚Oi” | '_' )+ )?
| ‚P‚Oi” ( ‚P‚Oi” | '_' )* '.' ( ‚P‚Oi” | '_' )* ( ( 'e' | 'E' ) •„†? ( ‚P‚Oi” | '_' )+ )?
;
•¶Žš’è”
:= '"' ( "\\\"" | ( ”CˆÓ•¶Žš - '"' ) )* '"'
;
ޝ•ÊŽq
:= ( ( ”CˆÓ•¶Žš - •„† - ';' - '"' - ‹ó”’ ) ( ”CˆÓ•¶Žš - •„† - ';' - ‹ó”’ )* ) - —\–ñŒê
;
Š®‘SCüޝ•ÊŽq
:= ޝ•ÊŽq ( '.' Š®‘SCüޝ•ÊŽq )?
;
ƒRƒƒ“ƒg
:= "//" ( ”CˆÓ•¶Žš - s’[ )
| "/--" ( ”CˆÓ•¶Žš - "--/" )* "--/"
| "/*" ( ”CˆÓ•¶Žš - "*/" )* "*/"
;
ƒL[ƒ[ƒh
:= Œ^錾ƒL[ƒ[ƒh
| §Œä\•¶ƒL[ƒ[ƒh
| \‘¢‰»ƒL[ƒ[ƒh
;
Œ^錾ƒL[ƒ[ƒh
:= "integer" "real" "string" "array" "object" "functum" "accessor"
;
§Œä\•¶ƒL[ƒ[ƒh
:= "if" "switch" "case" "default" "for" "for_each" "while" "do" "continue" "break" "goto"
;
\‘¢‰»ƒL[ƒ[ƒh
:= "module" "import"
;
// ‰‰ŽZŽq
‘ã“ü‰‰ŽZŽq
:= "=" | "+=" | "-=" | "*=" | "/=" | "%="
;
// ‰‰ŽZ
Šî–{‰‰ŽZ
:= ޝ•ÊŽq
| ’è”
| '(' ‰‰ŽZ ')'
;
Œã’u‰‰ŽZ
:= Šî–{‰‰ŽZ Œã’u‰‰ŽZCüŽq
;
Œã’u‰‰ŽZCüŽq
:= ( '[' ‰‰ŽZ ']'
| '(' ƒpƒ‰ƒ[ƒ^”z—ñ? ')'
| '++'
| '--'
) Œã’u‰‰ŽZCüŽq
| e
;
’P€‰‰ŽZ
:= Œã’u‰‰ŽZ
| "++" ’P€‰‰ŽZ
| "--" ’P€‰‰ŽZ
| ’P€‰‰ŽZŽq ƒLƒƒƒXƒg‰‰ŽZ
;
’P€‰‰ŽZŽq
:= '+' | '-'
;
ƒLƒƒƒXƒg‰‰ŽZ
:= '(' Œ^錾ƒL[ƒ[ƒh ')' ƒLƒƒƒXƒg‰‰ŽZ
| ’P€‰‰ŽZ
;
ƒpƒ‰ƒ[ƒ^”z—ñ
:= ‘ã“ü‰‰ŽZ ( ',' ‘ã“ü‰‰ŽZ )*
‘ã“ü‰‰ŽZ
:= ޝ•ÊŽq ‘ã“ü‰‰ŽZŽq ( ’è” | ޝ•ÊŽq )
| ޝ•ÊŽq ‘ã“ü‰‰ŽZŽq ‰‰ŽZ
;
‹@”\Žq
:= –¼‘O•t‚«‹@”\Žq
| “½–¼‹@”\Žq
;
–¼‘O•t‚«‹@”\Žq
:= "functum" identifier ƒpƒ‰ƒ[ƒ^”z—ñ? '{' \•¶* '}'
;
“½–¼‹@”\Žq
:= '{' \•¶* '}' - \•¶
;
// \•¶’è‹`
錾•¶
:= Œ^錾ƒL[ƒ[ƒh ޝ•ÊŽq ';'
| Œ^錾ƒL[ƒ[ƒh ‘ã“ü•¶ ( ',' ‘ã“ü•¶ )* ';'
;
// §Œä\•¶
for\•¶
:= "for" '(' ‘O’uŽÀs\•¶ ';' ðŒŽ® ';' Œã’uŽÀs\•¶ ')' ‹@”\Žq
;
while\•¶
:= "while" '(' ðŒŽ® ')' ‹@”\Žq
;
do_while\•¶
:= "do" ‹@”\Žq "while" '(' ðŒŽ® ')' ';'
;
if\•¶
:= "if" '(' ðŒŽ® ')' ‹@”\Žq ( "else" if\•¶ )* ( "else" ‹@”\Žq )?
G
switch_case\•¶
:= "switch" '(' ‰‰ŽZ ')' '{' ( "case" ’è” ‹@”\Žq )* ( "default" ‹@”\Žq )? '}'
;