|
| 1 | +Configuration file grammar: |
| 2 | +//regex which replace litteral values used are represented by the following: |
| 3 | +deck_list: deck list: |
| 4 | +card_name: [^;\]]+ //include CONDITION_CARD_END |
| 5 | +scenarios: scenarios: |
| 6 | +scenario_name: [^=>]+ //include CONDITION_SCENARIO_END |
| 7 | +display: display |
| 8 | +Upper case: and, or, xor, true, false. |
| 9 | +single symbol are exactly the same. |
| 10 | + |
| 11 | +//lowercase for literal, capital for production rule. |
| 12 | +START -> DECK PROBABILITY . |
| 13 | + |
| 14 | +DECK -> DECK_START SENTINEL_START DECK_LIST SENTINEL_END. |
| 15 | +DECK_START -> deck_list: . |
| 16 | +DECK_LIST -> CARD MORE_CARDS . |
| 17 | +MORE_CARDS -> CARD MORE_CARDS | . |
| 18 | +CARD -> CARD_NAME ; . |
| 19 | +CARD_NAME -> card_name . |
| 20 | + |
| 21 | +PROBABILITY -> PROBABILITY_START SENTINEL_START SCENARIO_LIST SENTINEL_END . |
| 22 | +PROBABILITY_START -> scenarios: . |
| 23 | + |
| 24 | +SCENARIO_LIST -> SCENARIO MORE_SCENARIOS . |
| 25 | +MORE_SCENARIOS -> SCENARIO MORE_SCENARIOS | . |
| 26 | + |
| 27 | +SCENARIO -> SCENARIO_NAME equals SENTINEL_START TREE DISPLAY SENTINEL_END . |
| 28 | +SCENARIO_NAME -> scenario_name . |
| 29 | + |
| 30 | +TREE -> TREE_START SENTINEL_START EXPR SENTINEL_END ; . |
| 31 | +TREE_START -> scenario equals . |
| 32 | + |
| 33 | +EXPR -> UNARY_EXPR BINARY_EXPR . |
| 34 | + |
| 35 | +UNARY_EXPR -> UNARY_OPERATOR UNARY_EXPR | PRIMARY_EXPR . |
| 36 | +UNARY_OPERATOR -> not . |
| 37 | + |
| 38 | +PRIMARY_EXPR -> CONDITION_CARD_START CARD_NAME CONDITION_CARD_END |
| 39 | + |CONDITION_SCENARIO_START SCENARIO_NAME CONDITION_SCENARIO_END |
| 40 | + |CONDITION_EXPR_START EXPR CONDITION_EXPR_END . |
| 41 | +CONDITION_CARD_START -> [ . |
| 42 | +CONDITION_CARD_END -> ] . |
| 43 | +CONDITION_SCENARIO_START -> < . |
| 44 | +CONDITION_SCENARIO_END -> > . |
| 45 | +CONDITION_EXPR_START -> ( . |
| 46 | +CONDITION_EXPR_END -> ) . |
| 47 | + |
| 48 | +BINARY_EXPR -> BINARY_OPERATOR UNARY_EXPR BINARY_EXPR | . |
| 49 | +BINARY_OPERATOR -> and | or | xor . |
| 50 | + |
| 51 | +DISPLAY -> DISPLAY_START DISPLAY_VALUE ; | . |
| 52 | +DISPLAY_START -> display equals . |
| 53 | +DISPLAY_VALUE -> true | false . |
| 54 | + |
| 55 | +SENTINEL_START -> {. |
| 56 | +SENTINEL_END -> } . |
| 57 | + |
| 58 | +https://smlweb.cpsc.ucalgary.ca/vital-stats.php?grammar=START+-%3E+DECK+PROBABILITY+.%0D%0A%0D%0ADECK+-%3E+DECK_START+SENTINEL_START+DECK_LIST+SENTINEL_END.%0D%0ADECK_START+-%3E+deck_list%3A+.%0D%0ADECK_LIST+-%3E+CARD+MORE_CARDS+.%0D%0AMORE_CARDS+-%3E+CARD+MORE_CARDS+%7C+.%0D%0ACARD+-%3E+CARD_NAME+%3B+.%0D%0ACARD_NAME+-%3E+card_name+.%0D%0A%0D%0APROBABILITY+-%3E+PROBABILITY_START+SENTINEL_START+SCENARIO_LIST+SENTINEL_END+.%0D%0APROBABILITY_START+-%3E+scenarios%3A+.%0D%0A%0D%0ASCENARIO_LIST+-%3E+SCENARIO+MORE_SCENARIOS+.%0D%0AMORE_SCENARIOS+-%3E+SCENARIO+MORE_SCENARIOS+%7C+.%0D%0A%0D%0ASCENARIO+-%3E+SCENARIO_NAME+equals+SENTINEL_START+TREE+DISPLAY+SENTINEL_END+.%0D%0ASCENARIO_NAME+-%3E+scenario_name+.%0D%0A%0D%0ATREE+-%3E+TREE_START+SENTINEL_START+EXPR+SENTINEL_END+%3B+.%0D%0ATREE_START+-%3E+scenario+equals+.%0D%0A%0D%0AEXPR+-%3E+UNARY_EXPR+BINARY_EXPR+.%0D%0A%0D%0AUNARY_EXPR+-%3E+UNARY_OPERATOR+UNARY_EXPR+%7C+PRIMARY_EXPR+.%0D%0AUNARY_OPERATOR+-%3E+not+.%0D%0A%0D%0APRIMARY_EXPR+-%3E+CONDITION_CARD_START+CARD_NAME+CONDITION_CARD_END+%0D%0A+++++++++++++++%7CCONDITION_SCENARIO_START+SCENARIO_NAME+CONDITION_SCENARIO_END+%0D%0A+++++++++++++++%7CCONDITION_EXPR_START+EXPR+CONDITION_EXPR_END+.%0D%0ACONDITION_CARD_START+-%3E+open_bracket+.%0D%0ACONDITION_CARD_END+-%3E+close_bracket+.%0D%0ACONDITION_SCENARIO_START+-%3E+less_than+.%0D%0ACONDITION_SCENARIO_END+-%3E+greater_than+.%0D%0ACONDITION_EXPR_START+-%3E+open_parenthesis+.%0D%0ACONDITION_EXPR_END+-%3E+close_parenthesis+.%0D%0A%0D%0ABINARY_EXPR+-%3E+BINARY_OPERATOR+UNARY_EXPR+BINARY_EXPR+%7C+.%0D%0ABINARY_OPERATOR+-%3E+and+%7C+or+%7C+xor+.%0D%0A%0D%0ADISPLAY+-%3E+DISPLAY_START+DISPLAY_VALUE+%3B+%7C+.%0D%0ADISPLAY_START+-%3E+display+equals+.%0D%0ADISPLAY_VALUE+-%3E+true+%7C+false+.%0D%0A%0D%0ASENTINEL_START+-%3E+open_brace.%0D%0ASENTINEL_END+-%3E+close_brace+. |
0 commit comments