| ParseCollageGrammar | ::= | ( ParseOption )* ParseGrammar ParseDerivation <EOF> |
| ParseOption | ::= | <SET> ParseIdentifier <ASSIGN> ( ParsePoints | ParsePoint | ParseNumber | ParseString | ParseBoolean | ParsePart | ParseEdge ) |
| | | <DISPLAY> ParseIdentifier ParseParameters | |
| | | PtOperation | |
| ParseGrammar | ::= | <GRAMMAR> ParseStartCollage ( ParseRule )* |
| ParseStartCollage | ::= | <START> ParseCollage |
| ParseCollage | ::= | ( ParseCollageElement )* <ENDCOLLAGE> |
| ParseCollageElement | ::= | ParsePins |
| | | ParsePart | |
| | | ParseEdge | |
| | | PtOperation | |
| ParsePins | ::= | <PINS> ParsePoints |
| ParsePart | ::= | <PART> ( PtOperation )? ( ParseLabel ParseIdentifier ParseParameters | <IDENTIFIER> ) ( PtOperation )? |
| ParseParameters | ::= | <LPAREN> ( ParseParameter )* <RPAREN> |
| ParseParameter | ::= | ParseIdentifier <ASSIGN> ( ParsePoints | ParsePoint | ParseNumber | ParseString ) |
| ParseEdge | ::= | <EDGE> ( PtOperation )? ( ParseLabel ParsePoints | <IDENTIFIER> ) ( PtOperation )? |
| ParseRule | ::= | <RULE> ( <LBRACKET> ParseLabel <RBRACKET> )? ParseLabel ( ParseRuleProb )? ParseCollage ( <CONTEXT> ( ParseAnyOf )? ( ParseDelete )? ParseCollage )? ( <NEGATIVE> <CONTEXT> ( ParseAnyOf )? ParseCollage )? ( <TABLE> ParseNumber )? |
| ParseRuleProb | ::= | <PROB> ParseNumber |
| ParseAnyOf | ::= | <ANY> <OF> |
| ParseDelete | ::= | <DELETE> |
| ParsePoints | ::= | <LBRACKET> ParsePointsTerm ( ( <PLUS> | <MINUS> | <STAR> | <SLASH> ) ParsePointTerm )? <RBRACKET> |
| ParsePointsTerm | ::= | AddPoint ( AddPoint )+ |
| | | <IDENTIFIER> | |
| AddPoint | ::= | ParsePoint |
| ParsePoint | ::= | <LPAREN> ParsePointTerm <PLUS> ParsePointTerm <RPAREN> |
| | | <LPAREN> ParsePointTerm <MINUS> ParsePointTerm <RPAREN> | |
| | | <LPAREN> ParsePointTerm <STAR> ParsePointTerm <RPAREN> | |
| | | <LPAREN> ParsePointTerm <STAR> ParsePointTerm <RPAREN> | |
| | | ParsePointTerm | |
| ParsePointTerm | ::= | <LPAREN> ParseNumber <COMMA> ParseNumber ( <RPAREN> | <COMMA> ParseNumber <RPAREN> ) |
| | | <IDENTIFIER> | |
| ParseDerivation | ::= | <DERIVATION> ( ParseDerivEntry )* |
| ParseDerivEntry | ::= | <UNTIL> ParseNumber <DO> ParseNumber |
| PtOperation | ::= | <LBRACE> ( <PUSH> NewPartTrans | <POP> )* <RBRACE> |
| NewPartTrans | ::= | <MAP> ParsePoints <TO> ParsePoints |
| | | <TRANSLATE> ParsePoint | |
| | | <SCALE> ParsePoint | |
| | | <ROTATE> ( ParsePoint )? <BY> ParseNumber | |
| ParseNumber | ::= | ( ParseProduct <PLUS> ParseNumber | ParseProduct <MINUS> ParseNumber | ParseProduct ) |
| ParseProduct | ::= | ( ParseTerm <STAR> ParseProduct | ParseTerm <SLASH> ParseProduct | ParseTerm ) |
| ParseTerm | ::= | ( <FLOATING_POINT_LITERAL> | <INTEGER_LITERAL> | <IDENTIFIER> | <LPAREN> ParseNumber <RPAREN> | <SIN> <LPAREN> ParseNumber <RPAREN> | <COS> <LPAREN> ParseNumber <RPAREN> | <TAN> <LPAREN> ParseNumber <RPAREN> | <ASIN> <LPAREN> ParseNumber <RPAREN> | <ACOS> <LPAREN> ParseNumber <RPAREN> | <ATAN> <LPAREN> ParseNumber <RPAREN> | <SQRT> <LPAREN> ParseNumber <RPAREN> | <LOG> <LPAREN> ParseNumber <RPAREN> | <EXP> <LPAREN> ParseNumber <RPAREN> | <POWER> <LPAREN> ParseNumber <COMMA> ParseNumber <RPAREN> | <MIN> <LPAREN> ParseNumber <COMMA> ParseNumber <RPAREN> | <MAX> <LPAREN> ParseNumber <COMMA> ParseNumber <RPAREN> | <ATAN2> <LPAREN> ParseNumber <COMMA> ParseNumber <RPAREN> | <RANDOM> ( <LPAREN> <RPAREN> )? | <EULER> ( <LPAREN> <RPAREN> )? | <PI> ( <LPAREN> <RPAREN> )? | <ABS> <LPAREN> ParseNumber <RPAREN> | <FLOOR> <LPAREN> ParseNumber <RPAREN> | <CEIL> <LPAREN> ParseNumber <RPAREN> | <RINT> <LPAREN> ParseNumber <RPAREN> | <RAD> <LPAREN> ParseNumber <RPAREN> ) |
| ParseLabel | ::= | ( ParseString | ParseCharacter | ParseIdentifier ) |
| ParseString | ::= | <STRING_LITERAL> |
| ParseCharacter | ::= | <CHARACTER_LITERAL> |
| ParseBoolean | ::= | <BOOL_TRUE> |
| | | <BOOL_FALSE> | |
| ParseIdentifier | ::= | <IDENTIFIER> |