grammar.txt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. Grammar
  2. ----
  3. Statement = DiceExpression | Command | Statement StatementDelimiter Statement | Statement EOL | EOL
  4. Command = 'quit' | 'clear'
  5. DiceExpression = Rep Rolls | Rolls | Rep Threshold | Threshold
  6. Rep = Number RepOperator
  7. Threshold = Rolls ThresholdOperator Number
  8. Rolls = Rolls AdditiveOperator Roll | Roll
  9. Roll = Number SingleDieOutcome | SingleDieOutcome | Number
  10. SingleDieOutcome = DiceOperator Number | DiceOperator Number Modifiers
  11. Modifiers = Explode | Keep | Explode Keep
  12. Explode = ExplodeOperator Number
  13. Keep = KeepOperator Number
  14. AdditiveOperator = '+' | '-'
  15. DiceOperator = 'd' | 'D'
  16. RepOperator = 'x' | 'X'
  17. ExplodeOperator = '!'
  18. ThresholdOperator = 't' | 'T' | '>'
  19. KeepOperator = 'k' | 'K'
  20. StatementDelimiter = ';'
  21. Valid state transitions
  22. ----
  23. INITIAL STATE TOKEN RECEIVED RESULTING STATE
  24. ------------------------------------------------------------------------
  25. start Number decide_reps_or_rolls
  26. start DiceOperator want_number_of_sides
  27. start AdditiveOperator want_roll
  28. start Command check_end
  29. start StatementDelimiter start
  30. start EOL finish
  31. decide_reps_or_rolls RepOperator want_roll
  32. decide_reps_or_rolls DiceOperator want_number_of_sides
  33. decide_reps_or_rolls AdditiveOperator want_roll
  34. decide_reps_or_rolls ThresholdOperator want_threshold
  35. decide_reps_or_rolls StatementDelimiter start
  36. decide_reps_or_rolls EOL finish
  37. want_number_of_sides Number check_modifiers_or_more_rolls
  38. want_roll Number check_dice_operator
  39. want_roll DiceOperator want_number_of_sides
  40. want_roll AdditiveOperator check_number_of_dice
  41. check_dice_operator DiceOperator want_number_of_sides
  42. check_dice_operator AdditiveOperator want_roll
  43. check_dice_operator ThresholdOperator want_threshold
  44. check_dice_operator StatementDelimiter start
  45. check_dice_operator EOL finish
  46. check_modifiers_or_more_rolls ExplodeOperator check_modifiers_or_more_rolls
  47. check_modifiers_or_more_rolls KeepOperator want_keep_number
  48. check_modifiers_or_more_rolls ThresholdOperator want_threshold
  49. check_modifiers_or_more_rolls AdditiveOperator want_roll
  50. check_modifiers_or_more_rolls StatementDelimiter start
  51. check_modifiers_or_more_rolls EOL finish
  52. check_more_rolls ThresholdOperator want_threshold
  53. check_more_rolls AdditiveOperator want_roll
  54. check_more_rolls StatementDelimiter start
  55. check_more_rolls EOL finish
  56. check_number_of_dice Number check_dice_operator
  57. check_number_of_dice DiceOperator want_number_of_sides
  58. want_threshold Number check_end
  59. want_keep_number Number check_more_rolls
  60. check_end StatementDelimiter start
  61. check_end EOL finish