Added support for integers
[fur] / parsing.py
index 62ac92f..6b11745 100644 (file)
@@ -1,5 +1,12 @@
 import collections
 
+IntegerLiteral = collections.namedtuple(
+    'IntegerLiteral',
+    [
+        'value',
+    ],
+)
+
 StringLiteral = collections.namedtuple(
     'StringLiteral',
     [
@@ -7,6 +14,16 @@ StringLiteral = collections.namedtuple(
     ],
 )
 
+def _integer_literal_parser(index, tokens):
+    failure = (False, index, None)
+
+    if tokens[index].type != 'integer_literal':
+        return failure
+    value = int(tokens[index].match)
+    index += 1
+
+    return True, index, IntegerLiteral(value=value)
+
 def _string_literal_parser(index, tokens):
     failure = (False, index, None)
 
@@ -17,6 +34,17 @@ def _string_literal_parser(index, tokens):
 
     return True, index, StringLiteral(value=value)
 
+def _argument_parser(index, tokens):
+    failure = (False, index, None)
+
+    for parser in [_integer_literal_parser, _string_literal_parser]:
+        success, index, value = parser(index, tokens)
+
+        if success:
+            return (success, index, value)
+
+    return failure
+
 
 FunctionCall = collections.namedtuple(
     'FunctionCall',
@@ -38,7 +66,7 @@ def _function_call_parser(index, tokens):
         return failure
     index += 1
 
-    success, index, argument = _string_literal_parser(index, tokens)
+    success, index, argument = _argument_parser(index, tokens)
 
     if not success:
         return failure