+def _literal_level_expression_parser(index, tokens):
+ return _or_parser(
+ _integer_literal_expression_parser,
+ _string_literal_expression_parser,
+ )(index, tokens)
+
+def _multiplication_level_expression_parser(index, tokens):
+ failure = (False, index, None)
+
+ success, index, result = _literal_level_expression_parser(index, tokens)
+
+ if not success:
+ return failure
+
+ while success and index < len(tokens) and tokens[index].type == 'multiplication_level_operator':
+ success = False
+
+ if index + 1 < len(tokens):
+ success, try_index, value = _literal_level_expression_parser(index + 1, tokens)
+
+ if success:
+ result = {
+ '*': FurMultiplicationExpression,
+ '//': FurIntegerDivisionExpression,
+ '%': FurModularDivisionExpression,
+ }[tokens[index].match](left=result, right=value)
+ index = try_index
+
+ return True, index, result
+
+def _addition_level_expression_parser(index, tokens):
+ failure = (False, index, None)
+
+ success, index, result = _multiplication_level_expression_parser(index, tokens)
+
+ if not success:
+ return failure
+
+ while success and index < len(tokens) and tokens[index].type == 'addition_level_operator':
+ success = False
+
+ if index + 1 < len(tokens):
+ success, try_index, value = _multiplication_level_expression_parser(index + 1, tokens)
+
+ if success:
+ result = {
+ '+': FurAdditionExpression,
+ '-': FurSubtractionExpression,
+ }[tokens[index].match](left=result, right=value)
+ index = try_index
+
+ return True, index, result