Parcourir la source

Added identifier possibility parser concerning syntax 'log_g(x)'.

Taddeus Kroes il y a 14 ans
Parent
commit
81415bb027
2 fichiers modifiés avec 14 ajouts et 4 suppressions
  1. 9 4
      src/parser.py
  2. 5 0
      tests/test_parser.py

+ 9 - 4
src/parser.py

@@ -398,10 +398,15 @@ class Parser(BisonParser):
             if op == OP_VALUE_MAP[OP_LOG]:
                 return Node(OP_LOG, values[1], Leaf(DEFAULT_LOGARITHM_BASE))
 
-            m = re.match(r'^log_([0-9]+)', op)
+            m = re.match(r'^log_([0-9]+|[a-zA-Z])', op)
 
             if m:
-                return Node(OP_LOG, values[1], Leaf(int(m.group(1))))
+                value = m.group(1)
+
+                if value.isdigit():
+                    value = int(value)
+
+                return Node(OP_LOG, values[1], Leaf(value))
 
             return Node(op, values[1])
 
@@ -534,8 +539,8 @@ class Parser(BisonParser):
     "["       { returntoken(LBRACKET); }
     "]"       { returntoken(RBRACKET); }
     "'"       { returntoken(APOSTROPH); }
-    log_[0-9]+"*(" { returntoken(FUNCTION_LPAREN); }
-    log_[0-9]+"*" { returntoken(FUNCTION); }
+    log_([0-9]+|[a-zA-Z])"*(" { returntoken(FUNCTION_LPAREN); }
+    log_([0-9]+|[a-zA-Z])"*" { returntoken(FUNCTION); }
     """ + operators + r"""
     "raise"   { returntoken(RAISE); }
     "graph"   { returntoken(GRAPH); }

+ 5 - 0
tests/test_parser.py

@@ -84,3 +84,8 @@ class TestParser(unittest.TestCase):
         self.assertEqual(tree('log(x, 10)'), log(x))
         self.assertEqual(tree('log(x, 2)'), log(x, 2))
         self.assertEqual(tree('log(x, g)'), log(x, g))
+
+        self.assertEqual(tree('log_2(x)'), log(x, 2))
+        self.assertEqual(tree('log_10(x)'), log(x))
+        self.assertEqual(tree('log_g(x)'), log(x, g))
+        self.assertEqual(tree('log_g x'), log(x, g))