import collections
+IntegerLiteral = collections.namedtuple(
+ 'IntegerLiteral',
+ [
+ 'value',
+ ],
+)
+
StringLiteral = collections.namedtuple(
'StringLiteral',
[
],
)
+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)
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',
return failure
index += 1
- success, index, argument = _string_literal_parser(index, tokens)
+ success, index, argument = _argument_parser(index, tokens)
if not success:
return failure