BNF for CSParser.jj

NON-TERMINALS

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>