Просмотр исходного кода

fix: stricter parsing for variables

Sebastian Bensusan 4 лет назад
Родитель
Сommit
7817efb81c
2 измененных файлов с 3 добавлено и 2 удалено
  1. 2 2
      src/main/grammar/calc.bnf
  2. 1 0
      src/test/frontend/extensions/calc_test.cljc

+ 2 - 2
src/main/grammar/calc.bnf

@@ -20,6 +20,6 @@ asin = <#'\s*'> <'asin('> expr <')'> <#'\s*'>
 <term> = scientific | number | variable | <#'\s*'> <'('> expr <')'> <#'\s*'>
 scientific = #'\s*[0-9]+\.?[0-9]*(e|E)-?[0-9]+()\s*'
 number = #'\s*[0-9]+\.?[0-9]*()\s*'
-variable = #'\s*[[a-zA-Z]+[\_*[a-zA-Z]*]*]*\s*'
-toassign = #'\s*[[a-zA-Z]+[\_*[a-zA-Z]*]*]*\s*'
+variable = #'\s*[a-zA-Z]+(\_+[a-zA-Z]+)*\s*'
+toassign = #'\s*[a-zA-Z]+(\_+[a-zA-Z]+)*\s*'
 assignment = toassign <#'\s*'> <'='> <#'\s*'> expr

+ 1 - 0
src/test/frontend/extensions/calc_test.cljc

@@ -89,6 +89,7 @@
                                (calc/eval env (calc/parse expr)))
                              (= final-env @env))
       {"a" 1 "b" 2}          ["a = 1" "b = a + 1"]
+      {"a" 1 "b" 3}          ["a = 1" "b=a*2+1"]
       {"a_a" 1 "b_b" 2}      ["a_a = 1" "b_b = a_a + 1"]
       {"variable" 1 "x" 0.0} ["variable = 1 + 0 * 2" "x = log(variable)"]
       {"x" 1 "u" 23 "v" 24}  ["x= 2 * 1 - 1 " "23 + 54" "u= 23" "v = x + u"]))