defaultSymbols.js.flow 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // @flow
  2. function last(...a: Array<number>): number {
  3. return a[a.length - 1]
  4. }
  5. function negation(a: number): number {
  6. return -a
  7. }
  8. function addition(a: number, b: number): number {
  9. return a + b
  10. }
  11. function subtraction(a: number, b: number): number {
  12. return a - b
  13. }
  14. function multiplication(a: number, b: number): number {
  15. return a * b
  16. }
  17. function division(a: number, b: number): number {
  18. return a / b
  19. }
  20. function max(...a: Array<number>): number {
  21. return Math.max(...a)
  22. }
  23. function min(...a: Array<number>): number {
  24. return Math.min(...a)
  25. }
  26. function comma(...a: Array<number | string>): Array<number | string> {
  27. return Array.of(...a)
  28. }
  29. const defaultSymbols = {
  30. symbols: {
  31. '*': {
  32. infix: {
  33. symbol: '*',
  34. f: multiplication,
  35. notation: 'infix',
  36. precedence: 4,
  37. rightToLeft: 0,
  38. argCount: 2,
  39. },
  40. symbol: '*',
  41. regSymbol: '\\*',
  42. },
  43. '/': {
  44. infix: {
  45. symbol: '/',
  46. f: division,
  47. notation: 'infix',
  48. precedence: 4,
  49. rightToLeft: 0,
  50. argCount: 2,
  51. },
  52. symbol: '/',
  53. regSymbol: '/',
  54. },
  55. '+': {
  56. infix: {
  57. symbol: '+',
  58. f: addition,
  59. notation: 'infix',
  60. precedence: 2,
  61. rightToLeft: 0,
  62. argCount: 2,
  63. },
  64. prefix: {
  65. symbol: '+',
  66. f: last,
  67. notation: 'prefix',
  68. precedence: 3,
  69. rightToLeft: 0,
  70. argCount: 1,
  71. },
  72. symbol: '+',
  73. regSymbol: '\\+',
  74. },
  75. '-': {
  76. infix: {
  77. symbol: '-',
  78. f: subtraction,
  79. notation: 'infix',
  80. precedence: 2,
  81. rightToLeft: 0,
  82. argCount: 2,
  83. },
  84. prefix: {
  85. symbol: '-',
  86. f: negation,
  87. notation: 'prefix',
  88. precedence: 3,
  89. rightToLeft: 0,
  90. argCount: 1,
  91. },
  92. symbol: '-',
  93. regSymbol: '-',
  94. },
  95. ',': {
  96. infix: {
  97. symbol: ',',
  98. f: comma,
  99. notation: 'infix',
  100. precedence: 1,
  101. rightToLeft: 0,
  102. argCount: 2,
  103. },
  104. symbol: ',',
  105. regSymbol: ',',
  106. },
  107. '(': {
  108. prefix: {
  109. symbol: '(',
  110. f: last,
  111. notation: 'prefix',
  112. precedence: 0,
  113. rightToLeft: 0,
  114. argCount: 1,
  115. },
  116. symbol: '(',
  117. regSymbol: '\\(',
  118. },
  119. ')': {
  120. postfix: {
  121. symbol: ')',
  122. f: undefined,
  123. notation: 'postfix',
  124. precedence: 0,
  125. rightToLeft: 0,
  126. argCount: 1,
  127. },
  128. symbol: ')',
  129. regSymbol: '\\)',
  130. },
  131. min: {
  132. func: {
  133. symbol: 'min',
  134. f: min,
  135. notation: 'func',
  136. precedence: 0,
  137. rightToLeft: 0,
  138. argCount: 1,
  139. },
  140. symbol: 'min',
  141. regSymbol: 'min\\b',
  142. },
  143. max: {
  144. func: {
  145. symbol: 'max',
  146. f: max,
  147. notation: 'func',
  148. precedence: 0,
  149. rightToLeft: 0,
  150. argCount: 1,
  151. },
  152. symbol: 'max',
  153. regSymbol: 'max\\b',
  154. },
  155. },
  156. }
  157. export default defaultSymbols