X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=parsing.py;h=0d7caa6ad1e9fd7066a9d992aa43d661282e267c;hp=1ab6df4e5534aec97f68a454b3afbccabc133cfd;hb=fb83d523f8eb241d5ccafe8d391a9edd62150b48;hpb=f60d1b48bbf73c51d214c5ae5c22ea3cdee087c1 diff --git a/parsing.py b/parsing.py index 1ab6df4..0d7caa6 100644 --- a/parsing.py +++ b/parsing.py @@ -44,6 +44,13 @@ FurStringLiteralExpression = collections.namedtuple( ], ) +FurNegationExpression = collections.namedtuple( + 'FurNegationExpression', + [ + 'value', + ], +) + FurAdditionExpression = collections.namedtuple( 'FurAdditionExpression', [ @@ -104,8 +111,22 @@ def _string_literal_expression_parser(index, tokens): return True, index, FurStringLiteralExpression(value=value) +def _negation_expression_parser(index, tokens): + failure = (False, index, None) + + if tokens[index].match != '-': + return failure + + success, index, value = _literal_level_expression_parser(index + 1, tokens) + + if not success: + return failure + + return (True, index, FurNegationExpression(value=value)) + def _literal_level_expression_parser(index, tokens): return _or_parser( + _negation_expression_parser, _function_call_expression_parser, _integer_literal_expression_parser, _string_literal_expression_parser,