X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=tokenization.py;h=bc8cf85a8f5a12aa556095f905bb190ef292c446;hp=3131c3581d6597efbd8f9c7e12709bf95f00abee;hb=1f2895250c61aeb81c0f0ba7efed156c9386dfac;hpb=730c0a3faa442985f6fdb73d91a1e6b9f72e6165 diff --git a/tokenization.py b/tokenization.py index 3131c35..bc8cf85 100644 --- a/tokenization.py +++ b/tokenization.py @@ -31,17 +31,22 @@ def _make_token_matcher(definition): return token_matcher - _TOKEN_MATCHERS = [ + ('keyword', r'(def|do|else|end|if)(?![a-z_])'), + ('open_bracket', r'\['), + ('close_bracket', r'\]'), ('open_parenthese', r'\('), ('close_parenthese', r'\)'), ('comma', r','), + ('colon', r':'), + ('period', r'\.'), ('integer_literal', r'\d+'), - ('symbol', r'[a-z]+'), + ('symbol', r'[a-z_]+'), ('single_quoted_string_literal', r"'.*?'"), - ('equality_level_operator', r'(<=|>=|==|!=|<|>)'), + ('double_quoted_string_literal', r'".*?"'), + ('comparison_level_operator', r'(<=|>=|==|!=|<|>)'), ('assignment_operator', r'='), - ('addition_level_operator', r'(\+|-)'), + ('addition_level_operator', r'(\+\+|\+|-)'), ('multiplication_level_operator', r'(\*|//|%)'), ('newline', r'\n'), ] @@ -58,6 +63,12 @@ def tokenize(source): index += 1 continue + if source[index] == '#': + while index < len(source) and source[index] != '\n': + index += 1 + + continue + success = False for matcher in _TOKEN_MATCHERS: @@ -205,7 +216,7 @@ if __name__ == '__main__': self.assertEqual( tokenize('=='), (Token( - type='equality_level_operator', + type='comparison_level_operator', match='==', index=0, line=1, @@ -216,7 +227,7 @@ if __name__ == '__main__': self.assertEqual( tokenize('>='), (Token( - type='equality_level_operator', + type='comparison_level_operator', match='>=', index=0, line=1, @@ -227,7 +238,7 @@ if __name__ == '__main__': self.assertEqual( tokenize('<='), (Token( - type='equality_level_operator', + type='comparison_level_operator', match='<=', index=0, line=1, @@ -238,7 +249,7 @@ if __name__ == '__main__': self.assertEqual( tokenize('>'), (Token( - type='equality_level_operator', + type='comparison_level_operator', match='>', index=0, line=1, @@ -249,7 +260,7 @@ if __name__ == '__main__': self.assertEqual( tokenize('<'), (Token( - type='equality_level_operator', + type='comparison_level_operator', match='<', index=0, line=1, @@ -260,7 +271,7 @@ if __name__ == '__main__': self.assertEqual( tokenize('!='), (Token( - type='equality_level_operator', + type='comparison_level_operator', match='!=', index=0, line=1,