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