Appendix A. Native Language Grammar
This format uses the notation that has become more or less standard: Non-terminal tokens followed by a colon. Indented items following the token are valid solutions. An ellipsis (...) following any item means it can be repeated. Optional items have the suffix opt appended to them. One departure from the standard: except for the first token, the non-terminals are listed alphabetically.
The grammar starts with the non-terminal token “program”.
program:
program-line...
active-line-section:
compound-statement
compound-statement:
{compound-statement-declaration... statement...}
compound-statement-declaration:
declaration-storage-classopt declaration-data-type declaration-init , ... ;
constant:
constant-double
constant-int
constant-string
constant-time
constant-double:
double-value
constant-int:
0x int-value
true
false
high
low
constant-string:
" quoted-string"
constant-time:
constant-double pixels
constant-double sec
constant-double msec
constant-double usec
constant-double lines
constant-double H
constant-double clocks
declaration-data-type:
double
int
string
time
declaration-init:
variable-name variable-initializationopt
declaration-storage-class:
exported
expression:
constant
variable
( expression )
! expression
~ expression
expression++
expression * expression
expression / expression
expression % expression
expression + expression
expression - expression
expression << expression
expression >> expression
expression < expression
expression <= expression
expression > expression
expression >= expression
expression == expression
expression != expression
expression || expression
expression && expression
expression | expression
expression & expression
expression = expression
eye-name:
right
left
field-definition:
field compound-statement
frame-portion-definition:
frame-portion-identifier = { sync-transition-set... }
frame-portion-identifier:
vertical back porch
vertical front porch
vertical sync
active
general-section:
general compound-statement
primary-color:
red
green
blue
program-line:
general-section
active-line-section
field-definition
statement:
expression
color = { primary-color , ... }
eye = { eye-name , ... }
frame-portion-definition
if ( expression ) statement
if ( expression ) else statement
sync-transition-instruction:
length = time-expression ;
sync-transition-direction = time-expression ;
sync-transition-multiplier:
repeat expression
sync-transition-set:
sync-transition-multiplieropt { sync-transition-instruction... }
time-expression:
expression
variable:
identifier
variable-initialization:
= expression
|