fork download
  1. double symbol() {
  2. if (nextToken() == '(') {
  3. expression();
  4. if (nextToken() != ')'
  5. throw error;
  6. } else {
  7. return getNumber();
  8. }
  9. }
  10.  
  11. double dice() {
  12. double n = symbol();
  13. do {
  14. if (nextToken() == 'd') {
  15. return rolldice(n, dice());
  16. else
  17. break;
  18. }while(1);
  19. return n;
  20. }
  21.  
  22. double factor() {
  23. double n = dice();
  24. do {
  25. if (nextToken() == '*') {
  26. n*=factor();
  27. else if (nextToken() == '/') {
  28. double r = factor();
  29. if (r==0)
  30. throw div0;
  31. n/=r;
  32. else if (nextToken() == '%') {
  33. double r = factor();
  34. if (r==0)
  35. throw div0;
  36. n%=r;
  37. } else
  38. return break;
  39. }while(1);
  40. return n;
  41. }
  42.  
  43. double term() {
  44. double n = factor();
  45. do {
  46. if (nextToken() == '+') {
  47. n+=term();
  48. else if (nextToken() == '-') {
  49. n-=term();
  50. else
  51. break;
  52. } while(1);
  53. return n;
  54. }
  55.  
  56. double parse() {
  57. return term();
  58. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty