From e7db2ff39cbc170741f54176edd9d316bc3e5016 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Tue, 24 Mar 2015 17:40:42 +0300 Subject: [PATCH] Parsing of '@' and '@=' operators (PY-15390) We have to introduce a new lexeme '@=' and re-define '@' to become a binary operator as well as the prefix of the decorator. --- .../jetbrains/python/lexer/_PythonLexer.java | 1047 +++++++++-------- .../com/jetbrains/python/PyTokenTypes.java | 11 +- .../com/jetbrains/python/PyElementTypes.java | 3 +- .../com/jetbrains/python/lexer/Python.flex | 1 + python/testData/psi/MatMul.py | 5 + python/testData/psi/MatMul.txt | 67 ++ .../jetbrains/python/PythonParsingTest.java | 5 + 7 files changed, 645 insertions(+), 494 deletions(-) create mode 100644 python/testData/psi/MatMul.py create mode 100644 python/testData/psi/MatMul.txt diff --git a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java index 214557a92cdb..406490cc2d38 100644 --- a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 4/26/14 11:33 AM */ +/* The following code was generated by JFlex 1.4.3 on 3/24/15 5:33 PM */ /* It's an automatically generated code. Do not modify it. */ package com.jetbrains.python.lexer; @@ -12,8 +12,8 @@ import com.intellij.openapi.util.text.StringUtil; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 4/26/14 11:33 AM from the specification file - * /Users/ignatov/src/ultimate/tools/lexer/../../community/python/src/com/jetbrains/python/lexer/Python.flex + * on 3/24/15 5:33 PM from the specification file + * /home/user/src/idea/tools/lexer/../../community/python/src/com/jetbrains/python/lexer/Python.flex */ class _PythonLexer implements FlexLexer { /** initial size of the lookahead buffer */ @@ -38,15 +38,15 @@ class _PythonLexer implements FlexLexer { * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = - "\11\0\1\40\1\42\1\0\1\41\1\13\22\0\1\37\1\74\1\36"+ - "\1\12\1\0\1\66\1\67\1\34\1\76\1\77\1\64\1\62\1\105"+ - "\1\26\1\23\1\65\1\1\1\5\6\3\2\2\1\106\1\43\1\73"+ - "\1\63\1\72\1\0\1\104\1\15\1\20\1\31\1\15\1\25\1\15"+ + "\11\0\1\40\1\42\1\0\1\41\1\13\22\0\1\37\1\75\1\36"+ + "\1\12\1\0\1\67\1\70\1\34\1\77\1\100\1\64\1\62\1\105"+ + "\1\26\1\23\1\66\1\1\1\5\6\3\2\2\1\106\1\43\1\74"+ + "\1\63\1\73\1\0\1\65\1\15\1\20\1\31\1\15\1\25\1\15"+ "\3\14\1\27\1\14\1\21\2\14\1\17\2\14\1\32\2\14\1\32"+ - "\2\14\1\16\2\14\1\100\1\35\1\101\1\71\1\14\1\107\1\44"+ + "\2\14\1\16\2\14\1\101\1\35\1\102\1\72\1\14\1\107\1\44"+ "\1\10\1\30\1\46\1\24\1\4\1\57\1\61\1\53\1\27\1\52"+ "\1\11\1\56\1\45\1\7\1\54\1\14\1\50\1\47\1\51\1\33"+ - "\1\14\1\60\1\6\1\55\1\14\1\102\1\70\1\103\1\75\53\0"+ + "\1\14\1\60\1\6\1\55\1\14\1\103\1\71\1\104\1\76\53\0"+ "\1\14\12\0\1\14\4\0\1\14\5\0\27\14\1\0\7\14\30\14"+ "\1\0\10\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ @@ -75,90 +75,108 @@ class _PythonLexer implements FlexLexer { "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\4\14\31\0\140\14\22\14\4\0\14\14\16\0"+ - "\5\14\11\0\1\14\21\0\130\22\5\0\23\22\12\0\1\14\13\0"+ - "\1\14\1\0\3\14\1\0\1\14\1\0\2\14\1\14\21\14\1\0"+ - "\11\14\43\14\1\0\2\14\3\14\3\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\7\14\2\14\1\14\2\14\2\14\1\14\1\14"+ + "\4\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\105\14"+ + "\1\14\33\14\22\14\4\0\14\14\16\0\5\14\7\0\1\14\1\0"+ + "\1\14\21\0\160\22\1\14\1\14\1\14\1\14\1\14\1\0\1\14"+ + "\1\14\2\0\1\14\3\14\10\0\1\14\1\0\3\14\1\0\1\14"+ + "\1\0\2\14\1\14\21\14\1\0\11\14\43\14\1\14\2\14\3\14"+ + "\3\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\5\14"+ - "\1\14\1\14\1\0\1\14\1\14\2\14\1\14\4\0\60\14\60\14"+ + "\1\14\1\14\1\14\1\14\5\14\1\14\1\14\1\0\1\14\1\14"+ + "\2\14\2\14\63\14\60\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\0\5\22"+ + "\2\0\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\1\0\4\22\3\0\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\2\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\2\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\2\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\1\14\1\0\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\2\0\1\14\1\14\6\0\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\41\0\46\14\2\0\1\14\7\0\47\14"+ - "\11\0\21\22\1\0\27\22\1\0\3\22\1\0\1\22\1\0\2\22"+ - "\1\0\1\22\13\0\33\14\5\0\3\14\35\0\6\22\13\0\32\14"+ - "\5\0\1\14\12\14\16\22\7\0\12\22\4\0\2\14\1\22\143\14"+ - "\1\0\1\14\7\22\2\0\6\22\2\14\2\22\1\0\4\22\2\14"+ - "\12\22\3\14\2\0\1\14\20\0\1\14\1\22\36\14\33\22\2\0"+ - "\3\14\60\0\46\14\13\22\1\14\u014f\0\2\22\1\22\66\14\2\0"+ - "\1\22\1\14\3\22\10\22\4\22\1\22\2\0\1\14\4\22\3\0"+ - "\12\14\2\22\2\0\12\22\21\0\1\22\2\22\1\0\10\14\2\0"+ - "\2\14\2\0\26\14\1\0\7\14\1\0\1\14\3\0\4\14\2\0"+ - "\1\22\1\14\3\22\4\22\2\0\2\22\2\0\2\22\1\22\11\0"+ - "\1\22\4\0\2\14\1\0\3\14\2\22\2\0\12\22\2\14\17\0"+ - "\2\22\1\22\1\0\6\14\4\0\2\14\2\0\26\14\1\0\7\14"+ - "\1\0\2\14\1\0\2\14\1\0\2\14\2\0\1\22\1\0\3\22"+ - "\2\22\4\0\2\22\2\0\3\22\13\0\4\14\1\0\1\14\7\0"+ - "\12\22\2\22\3\14\14\0\2\22\1\22\1\0\11\14\1\0\3\14"+ - "\1\0\26\14\1\0\7\14\1\0\2\14\1\0\5\14\2\0\1\22"+ - "\1\14\3\22\5\22\1\0\2\22\1\22\1\0\2\22\1\22\2\0"+ - "\1\14\17\0\2\14\2\22\2\0\12\22\21\0\1\22\2\22\1\0"+ - "\10\14\2\0\2\14\2\0\26\14\1\0\7\14\1\0\2\14\1\0"+ - "\5\14\2\0\1\22\1\14\1\22\1\22\1\22\3\22\3\0\2\22"+ - "\2\0\2\22\1\22\10\0\1\22\1\22\4\0\2\14\1\0\3\14"+ - "\4\0\12\22\1\0\1\14\20\0\1\22\1\14\1\0\6\14\3\0"+ - "\3\14\1\0\4\14\3\0\2\14\1\0\1\14\1\0\2\14\3\0"+ - "\2\14\3\0\3\14\3\0\10\14\1\0\3\14\4\0\2\22\1\22"+ - "\2\22\3\0\3\22\1\0\3\22\1\22\11\0\1\22\17\0\11\22"+ - "\21\0\3\22\1\0\10\14\1\0\3\14\1\0\27\14\1\0\12\14"+ - "\1\0\5\14\4\0\3\22\4\22\1\0\3\22\1\0\4\22\7\0"+ - "\2\22\11\0\2\14\4\0\12\22\22\0\2\22\1\0\10\14\1\0"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\11\0\46\14\2\0"+ + "\1\14\7\0\47\14\11\0\55\22\1\0\1\22\1\0\2\22\1\0"+ + "\2\22\1\0\1\22\10\0\33\14\5\0\3\14\35\0\13\22\5\0"+ + "\40\14\1\14\12\14\25\22\12\22\4\0\2\14\1\22\143\14\1\0"+ + "\1\14\7\22\2\0\6\22\2\14\2\22\1\0\4\22\2\14\12\22"+ + "\3\14\2\0\1\14\20\0\1\14\1\22\36\14\33\22\2\0\131\14"+ + "\13\22\1\14\16\0\12\22\41\14\11\22\2\14\4\0\1\14\5\0"+ + "\26\14\4\22\1\14\11\22\1\14\3\22\1\14\5\22\22\0\31\14"+ + "\3\22\244\0\3\22\1\22\66\14\1\22\1\22\1\22\1\14\3\22"+ + "\10\22\4\22\1\22\2\22\1\14\7\22\12\14\2\22\2\0\12\22"+ + "\1\0\1\14\6\14\1\0\7\14\1\0\1\22\2\22\1\0\10\14"+ + "\2\0\2\14\2\0\26\14\1\0\7\14\1\0\1\14\3\0\4\14"+ + "\2\0\1\22\1\14\3\22\4\22\2\0\2\22\2\0\2\22\1\22"+ + "\1\14\10\0\1\22\4\0\2\14\1\0\3\14\2\22\2\0\12\22"+ + "\2\14\17\0\2\22\1\22\1\0\6\14\4\0\2\14\2\0\26\14"+ + "\1\0\7\14\1\0\2\14\1\0\2\14\1\0\2\14\2\0\1\22"+ + "\1\0\3\22\2\22\4\0\2\22\2\0\3\22\3\0\1\22\7\0"+ + "\4\14\1\0\1\14\7\0\12\22\2\22\3\14\1\22\13\0\2\22"+ + "\1\22\1\0\11\14\1\0\3\14\1\0\26\14\1\0\7\14\1\0"+ + "\2\14\1\0\5\14\2\0\1\22\1\14\3\22\5\22\1\0\2\22"+ + "\1\22\1\0\2\22\1\22\2\0\1\14\17\0\2\14\2\22\2\0"+ + "\12\22\21\0\1\22\2\22\1\0\10\14\2\0\2\14\2\0\26\14"+ + "\1\0\7\14\1\0\2\14\1\0\5\14\2\0\1\22\1\14\1\22"+ + "\1\22\1\22\4\22\2\0\2\22\2\0\2\22\1\22\10\0\1\22"+ + "\1\22\4\0\2\14\1\0\3\14\2\22\2\0\12\22\1\0\1\14"+ + "\20\0\1\22\1\14\1\0\6\14\3\0\3\14\1\0\4\14\3\0"+ + "\2\14\1\0\1\14\1\0\2\14\3\0\2\14\3\0\3\14\3\0"+ + "\14\14\4\0\2\22\1\22\2\22\3\0\3\22\1\0\3\22\1\22"+ + "\2\0\1\14\6\0\1\22\16\0\12\22\21\0\3\22\1\0\10\14"+ + "\1\0\3\14\1\0\27\14\1\0\12\14\1\0\5\14\3\0\1\14"+ + "\3\22\4\22\1\0\3\22\1\0\4\22\7\0\2\22\1\0\2\14"+ + "\6\0\2\14\2\22\2\0\12\22\22\0\2\22\1\0\10\14\1\0"+ "\3\14\1\0\27\14\1\0\12\14\1\0\5\14\2\0\1\22\1\14"+ "\1\22\1\22\5\22\1\0\1\22\2\22\1\0\2\22\2\22\7\0"+ - "\2\22\7\0\1\14\1\0\2\14\4\0\12\22\22\0\2\22\1\0"+ - "\10\14\1\0\3\14\1\0\27\14\1\0\20\14\4\0\3\22\3\22"+ - "\2\0\3\22\1\0\3\22\1\22\11\0\1\22\10\0\2\14\4\0"+ - "\12\22\22\0\2\22\1\0\22\14\3\0\30\14\1\0\11\14\1\0"+ - "\1\14\2\0\7\14\3\0\1\22\4\0\3\22\3\22\1\0\1\22"+ - "\1\0\10\22\22\0\2\22\15\0\60\14\1\22\2\14\7\22\5\0"+ - "\6\14\1\14\10\22\1\0\12\22\47\0\2\14\1\0\1\14\2\0"+ - "\2\14\1\0\1\14\2\0\1\14\6\0\4\14\1\0\7\14\1\0"+ - "\3\14\1\0\1\14\1\0\1\14\2\0\2\14\1\0\4\14\1\22"+ - "\2\14\6\22\1\0\2\22\1\14\2\0\5\14\1\0\1\14\1\0"+ - "\6\22\2\0\12\22\2\0\2\14\42\0\1\14\27\0\2\22\6\0"+ - "\12\22\13\0\1\22\1\0\1\22\1\0\1\22\4\0\2\22\10\14"+ - "\1\0\42\14\6\0\16\22\1\22\5\22\1\0\2\22\4\14\4\0"+ - "\10\22\1\0\44\22\11\0\1\22\71\0\42\14\1\0\5\14\1\0"+ - "\2\14\1\0\1\22\4\22\1\22\1\22\3\0\2\22\1\22\1\22"+ - "\6\0\12\22\6\0\6\14\2\22\2\22\106\0\46\14\12\0\51\14"+ - "\7\0\132\14\5\0\104\14\5\0\122\14\6\0\7\14\1\0\77\14"+ - "\1\0\1\14\1\0\4\14\2\0\7\14\1\0\1\14\1\0\4\14"+ - "\2\0\47\14\1\0\1\14\1\0\4\14\2\0\37\14\1\0\1\14"+ - "\1\0\4\14\2\0\7\14\1\0\1\14\1\0\4\14\2\0\7\14"+ - "\1\0\7\14\1\0\27\14\1\0\37\14\1\0\1\14\1\0\4\14"+ - "\2\0\7\14\1\0\47\14\1\0\23\14\16\0\11\22\56\0\125\14"+ - "\14\0\u026c\14\2\0\10\14\12\0\32\14\5\0\113\14\3\0\3\14"+ - "\17\0\15\14\1\0\4\14\3\22\13\0\22\14\3\22\13\0\22\14"+ - "\2\22\14\0\15\14\1\0\3\14\1\0\2\22\14\0\64\14\2\0"+ - "\1\22\7\22\10\22\1\22\2\22\13\22\3\0\1\14\4\0\1\14"+ - "\1\22\2\0\12\22\41\0\3\22\2\0\12\22\6\0\43\14\1\14"+ - "\64\14\10\0\51\14\1\22\126\0\35\14\3\0\3\22\4\22\2\22"+ - "\3\22\4\0\2\22\1\22\6\22\3\22\12\0\12\22\36\14\2\0"+ - "\5\14\u038b\0\54\14\66\14\12\14\224\0\1\14\1\14\1\14\1\14"+ + "\2\22\7\0\1\14\1\0\2\14\2\22\2\0\12\22\1\0\2\14"+ + "\17\0\2\22\1\0\10\14\1\0\3\14\1\0\51\14\2\0\1\14"+ + "\3\22\4\22\1\0\3\22\1\0\3\22\1\22\1\14\10\0\1\22"+ + "\10\0\2\14\2\22\2\0\12\22\12\0\6\14\2\0\2\22\1\0"+ + "\22\14\3\0\30\14\1\0\11\14\1\0\1\14\2\0\7\14\3\0"+ + "\1\22\4\0\3\22\3\22\1\0\1\22\1\0\10\22\22\0\2\22"+ + "\15\0\60\14\1\22\2\14\7\22\5\0\6\14\1\14\10\22\1\0"+ + "\12\22\47\0\2\14\1\0\1\14\2\0\2\14\1\0\1\14\2\0"+ + "\1\14\6\0\4\14\1\0\7\14\1\0\3\14\1\0\1\14\1\0"+ + "\1\14\2\0\2\14\1\0\4\14\1\22\2\14\6\22\1\0\2\22"+ + "\1\14\2\0\5\14\1\0\1\14\1\0\6\22\2\0\12\22\2\0"+ + "\2\14\42\0\1\14\27\0\2\22\6\0\12\22\13\0\1\22\1\0"+ + "\1\22\1\0\1\22\4\0\2\22\10\14\1\0\44\14\4\0\16\22"+ + "\1\22\5\22\1\0\2\22\5\14\13\22\1\0\44\22\11\0\1\22"+ + "\71\0\53\14\2\22\4\22\1\22\6\22\1\22\2\22\2\22\2\22"+ + "\1\14\12\22\6\0\6\14\2\22\2\22\4\14\3\22\1\14\3\22"+ + "\2\14\7\22\3\14\4\22\15\14\1\22\2\22\2\22\6\22\1\22"+ + "\1\14\1\22\12\22\3\22\1\22\2\0\46\14\12\0\53\14\1\0"+ + "\1\14\3\0\u0149\14\1\0\4\14\2\0\7\14\1\0\1\14\1\0"+ + "\4\14\2\0\51\14\1\0\4\14\2\0\41\14\1\0\4\14\2\0"+ + "\7\14\1\0\1\14\1\0\4\14\2\0\17\14\1\0\71\14\1\0"+ + "\4\14\2\0\103\14\2\0\3\22\40\0\20\14\20\0\125\14\14\0"+ + "\u026c\14\2\0\21\14\1\0\32\14\5\0\113\14\3\0\3\14\17\0"+ + "\15\14\1\0\4\14\3\22\13\0\22\14\3\22\13\0\22\14\2\22"+ + "\14\0\15\14\1\0\3\14\1\0\2\22\14\0\64\14\2\0\1\22"+ + "\7\22\10\22\1\22\2\22\13\22\3\0\1\14\4\0\1\14\1\22"+ + "\2\0\12\22\41\0\3\22\2\0\12\22\6\0\43\14\1\14\64\14"+ + "\10\0\51\14\1\22\1\14\5\0\106\14\12\0\35\14\3\0\3\22"+ + "\4\22\2\22\3\22\4\0\2\22\1\22\6\22\3\22\12\0\12\22"+ + "\36\14\2\0\5\14\13\0\54\14\4\0\21\22\7\14\2\22\6\0"+ + "\12\22\46\0\27\14\2\22\3\22\4\0\65\14\1\22\1\22\1\22"+ + "\7\22\1\0\1\22\1\22\1\22\2\22\10\22\6\22\12\22\2\0"+ + "\1\22\12\22\6\0\12\22\15\0\1\14\130\0\4\22\1\22\57\14"+ + "\1\22\1\22\5\22\1\22\1\22\5\22\1\22\2\22\7\14\4\0"+ + "\12\22\21\0\11\22\14\0\2\22\1\22\36\14\1\22\4\22\2\22"+ + "\2\22\1\22\3\0\2\14\12\22\6\0\46\14\1\22\1\22\2\22"+ + "\3\22\1\22\1\22\3\22\2\22\14\0\44\14\10\22\10\22\2\22"+ + "\2\22\10\0\12\22\3\0\3\14\12\22\36\14\6\14\122\0\3\22"+ + "\1\0\15\22\1\22\7\22\4\14\1\22\4\14\1\22\15\0\54\14"+ + "\66\14\26\14\1\14\42\14\45\14\47\22\25\0\4\22\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ @@ -173,7 +191,7 @@ class _PythonLexer implements FlexLexer { "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\1\14\7\14\4\0\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\11\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ @@ -182,28 +200,77 @@ class _PythonLexer implements FlexLexer { "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ - "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\6\0\10\14\10\14"+ - "\6\14\2\0\6\14\2\0\10\14\10\14\10\14\10\14\6\14\2\0"+ - "\6\14\2\0\10\14\1\0\1\14\1\0\1\14\1\0\1\14\1\0"+ - "\1\14\10\14\10\14\16\14\2\0\10\14\10\14\10\14\10\14\10\14"+ - "\10\14\5\14\1\0\2\14\4\14\1\14\1\0\1\14\3\0\3\14"+ - "\1\0\2\14\4\14\1\14\3\0\4\14\2\0\2\14\4\14\4\0"+ - "\10\14\5\14\5\0\3\14\1\0\2\14\4\14\1\14\102\0\2\22"+ - "\23\0\1\22\34\0\1\14\15\0\1\14\120\0\15\22\4\0\1\22"+ - "\3\0\6\22\27\0\1\14\4\0\1\14\2\0\1\14\3\14\2\14"+ - "\3\14\1\14\1\0\1\14\3\0\5\14\6\0\1\14\1\0\1\14"+ - "\1\0\1\14\1\0\4\14\1\0\1\14\2\14\1\0\1\14\1\14"+ - "\4\14\1\14\3\0\1\14\2\14\5\0\1\14\4\14\26\0\44\14"+ - "\u0e81\0\1\14\1\14\1\14\31\0\11\14\6\22\1\0\5\14\2\0"+ - "\3\14\1\14\1\14\4\0\126\14\2\0\2\22\2\0\2\14\1\14"+ - "\1\0\132\14\1\22\3\14\1\14\5\0\50\14\4\0\136\14\21\0"+ - "\30\14\70\0\20\14\u0200\0\u19b6\14\112\0\u51a6\14\132\0\u048d\14\u0773\0"+ - "\u2ba4\14\u215c\0\u012e\14\2\0\73\14\225\0\7\14\14\0\5\14\5\0"+ - "\1\14\1\22\12\14\1\0\15\14\1\0\5\14\1\0\1\14\1\0"+ - "\2\14\1\0\2\14\1\0\154\14\41\0\u016b\14\22\0\100\14\2\0"+ - "\66\14\50\0\14\14\4\0\20\22\20\0\4\22\17\0\2\22\30\0"+ - "\3\22\40\0\5\14\1\0\207\14\23\0\12\22\7\0\32\14\4\0"+ - "\1\22\1\0\32\14\12\0\1\22\12\14\1\14\55\14\2\14\37\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\11\14\10\14\6\14\2\0\6\14"+ + "\2\0\10\14\10\14\10\14\10\14\6\14\2\0\6\14\2\0\10\14"+ + "\1\0\1\14\1\0\1\14\1\0\1\14\1\0\1\14\10\14\10\14"+ + "\16\14\2\0\10\14\10\14\10\14\10\14\10\14\10\14\5\14\1\0"+ + "\2\14\4\14\1\14\1\0\1\14\3\0\3\14\1\0\2\14\4\14"+ + "\1\14\3\0\4\14\2\0\2\14\4\14\4\0\10\14\5\14\5\0"+ + "\3\14\1\0\2\14\4\14\1\14\102\0\2\22\23\0\1\22\34\0"+ + "\1\14\15\0\1\14\20\0\15\14\63\0\15\22\4\0\1\22\3\0"+ + "\14\22\21\0\1\14\4\0\1\14\2\0\1\14\3\14\2\14\3\14"+ + "\1\14\1\0\1\14\3\0\5\14\6\0\1\14\1\0\1\14\1\0"+ + "\1\14\1\0\4\14\1\0\1\14\4\14\1\14\4\14\1\14\2\0"+ + "\2\14\2\14\5\0\1\14\4\14\4\0\1\14\21\0\43\14\1\14"+ + "\1\14\4\14\u0a77\0\57\14\1\0\57\14\1\0\1\14\1\14\3\14"+ + "\2\14\1\14\1\14\1\14\1\14\1\14\1\14\4\14\1\14\1\14"+ + "\2\14\1\14\7\14\1\14\3\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\2\14\6\0\1\14\1\14\1\14\1\14\3\22"+ + "\16\0\46\14\12\0\66\14\11\0\1\14\17\0\1\22\27\14\11\0"+ + "\7\14\1\0\7\14\1\0\7\14\1\0\7\14\1\0\7\14\1\0"+ + "\7\14\1\0\7\14\1\0\7\14\1\0\40\22\57\0\1\14\u01d5\0"+ + "\1\14\1\14\1\14\31\0\11\14\6\22\1\0\5\14\2\0\3\14"+ + "\1\14\1\14\4\0\126\14\2\0\2\22\2\0\2\14\1\14\1\0"+ + "\132\14\1\0\3\14\1\14\5\0\51\14\3\0\136\14\21\0\33\14"+ + "\65\0\20\14\u0200\0\u19b6\14\112\0\u51cc\14\64\0\25\14\1\14\u0477\14"+ + "\103\0\50\14\6\14\2\0\u010c\14\1\14\3\0\20\14\12\22\2\14"+ + "\24\0\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\22\14\0"+ + "\2\22\1\0\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\10\0\106\14\12\14"+ + "\2\22\45\0\11\14\2\0\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\3\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14\1\14"+ + "\1\14\10\14\1\14\1\14\1\14\1\14\2\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\1\14\2\0\1\14\1\14"+ + "\1\14\1\14\1\0\1\14\1\14\16\0\1\14\1\14\1\14\1\14"+ + "\1\14\1\14\1\14\1\14\1\14\1\14\120\0\1\14\7\14\1\22"+ + "\3\14\1\22\4\14\1\22\27\14\2\22\2\22\1\22\30\0\64\14"+ + "\14\0\2\22\62\14\20\22\1\22\13\0\12\22\6\0\22\22\6\14"+ + "\3\0\1\14\4\0\12\22\34\14\10\22\2\0\27\14\13\22\2\22"+ + "\14\0\35\14\3\0\3\22\1\22\57\14\1\22\2\22\4\22\2\22"+ + "\1\22\4\22\16\0\1\14\12\22\46\0\51\14\6\22\2\22\2\22"+ + "\2\22\2\22\11\0\3\14\1\22\10\14\1\22\1\22\2\0\12\22"+ + "\6\0\20\14\1\14\6\14\3\0\1\14\1\22\4\0\60\14\1\22"+ + "\1\14\3\22\2\14\2\22\5\14\2\22\1\14\1\22\1\14\30\0"+ + "\2\14\1\14\43\0\6\14\2\0\6\14\2\0\6\14\11\0\7\14"+ + "\1\0\7\14\221\0\43\14\2\22\1\22\2\22\1\22\2\22\1\0"+ + "\1\22\1\22\2\0\12\22\6\0\u2ba4\14\14\0\27\14\4\0\61\14"+ + "\u2104\0\u012e\14\2\0\76\14\2\0\152\14\46\0\7\14\14\0\5\14"+ + "\5\0\1\14\1\22\12\14\1\0\15\14\1\0\5\14\1\0\1\14"+ + "\1\0\2\14\1\0\2\14\1\0\154\14\41\0\u016b\14\22\0\100\14"+ + "\2\0\66\14\50\0\14\14\4\0\20\22\20\0\7\22\14\0\2\22"+ + "\30\0\3\22\40\0\5\14\1\0\207\14\23\0\12\22\7\0\32\14"+ + "\4\0\1\22\1\0\32\14\13\0\12\14\1\14\55\14\2\14\37\14"+ "\3\0\6\14\2\0\6\14\2\0\6\14\2\0\3\14\43\0"; /** @@ -220,29 +287,29 @@ class _PythonLexer implements FlexLexer { "\3\0\1\1\2\2\5\3\1\4\1\3\1\5\1\3"+ "\1\6\1\3\1\7\1\10\1\7\1\11\1\12\1\13"+ "\1\14\1\15\12\3\1\16\1\17\1\20\1\21\1\22"+ - "\1\23\1\24\1\25\1\26\1\27\1\1\1\30\1\31"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\1\1\31"+ "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ "\1\42\2\43\1\44\2\45\1\46\3\3\2\47\1\3"+ "\1\41\1\2\4\0\1\2\1\50\1\0\1\51\3\3"+ "\1\52\5\3\1\53\2\3\3\7\1\54\3\7\7\3"+ "\1\55\1\56\1\57\5\3\1\60\1\61\1\62\1\63"+ "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+ - "\1\74\1\75\1\76\1\77\1\0\3\45\1\100\3\45"+ - "\2\3\6\47\2\0\1\101\3\2\1\50\1\0\1\102"+ - "\12\3\1\7\1\103\1\104\1\0\1\103\1\105\1\3"+ - "\1\106\1\107\1\110\2\3\1\111\5\3\1\112\1\113"+ - "\1\114\1\115\1\0\1\45\1\116\1\117\1\0\1\116"+ - "\1\3\1\47\2\120\1\121\1\3\2\0\3\3\1\122"+ - "\1\123\2\3\1\0\2\124\1\0\4\3\1\125\3\3"+ - "\3\0\2\117\7\0\1\3\2\0\1\126\3\3\1\127"+ - "\1\0\2\103\1\0\2\3\1\130\1\3\1\131\1\3"+ - "\1\132\3\0\2\116\4\0\2\120\1\0\1\3\1\133"+ - "\1\134\1\3\3\103\1\135\1\136\1\137\1\140\3\116"+ - "\3\120\1\141\1\3\1\124\1\0\1\142\6\0\1\143"+ - "\2\103\2\116\2\120"; + "\1\74\1\75\1\76\1\77\1\100\1\0\3\45\1\101"+ + "\3\45\2\3\6\47\2\0\1\102\3\2\1\50\1\0"+ + "\1\103\12\3\1\7\1\104\1\105\1\0\1\104\1\106"+ + "\1\3\1\107\1\110\1\111\2\3\1\112\5\3\1\113"+ + "\1\114\1\115\1\116\1\0\1\45\1\117\1\120\1\0"+ + "\1\117\1\3\1\47\2\121\1\122\1\3\2\0\3\3"+ + "\1\123\1\124\2\3\1\0\2\125\1\0\4\3\1\126"+ + "\3\3\3\0\2\120\7\0\1\3\2\0\1\127\3\3"+ + "\1\130\1\0\2\104\1\0\2\3\1\131\1\3\1\132"+ + "\1\3\1\133\3\0\2\117\4\0\2\121\1\0\1\3"+ + "\1\134\1\135\1\3\3\104\1\136\1\137\1\140\1\141"+ + "\3\117\3\121\1\142\1\3\1\125\1\0\1\143\6\0"+ + "\1\144\2\104\2\117\2\121"; private static int [] zzUnpackAction() { - int [] result = new int[297]; + int [] result = new int[298]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -272,42 +339,42 @@ class _PythonLexer implements FlexLexer { "\0\u0480\0\u04c8\0\330\0\u0510\0\330\0\330\0\330\0\330"+ "\0\330\0\u0558\0\u05a0\0\u05e8\0\u0630\0\u0678\0\u06c0\0\u0708"+ "\0\u0750\0\u0798\0\u07e0\0\u0828\0\u0870\0\u08b8\0\u0900\0\u0948"+ - "\0\u0990\0\u09d8\0\u0a20\0\u0a68\0\u0ab0\0\u0af8\0\330\0\330"+ + "\0\u0990\0\u09d8\0\u0a20\0\u0a68\0\u0ab0\0\u0af8\0\u0b40\0\330"+ "\0\330\0\330\0\330\0\330\0\330\0\330\0\330\0\330"+ - "\0\330\0\330\0\u0b40\0\u0b88\0\u0bd0\0\u0c18\0\330\0\u0c60"+ - "\0\u0ca8\0\u0cf0\0\u0d38\0\u0d80\0\u0dc8\0\u0e10\0\u0e58\0\u0ea0"+ - "\0\u0ee8\0\u0f30\0\u0f78\0\330\0\u0fc0\0\u1008\0\330\0\u1050"+ - "\0\u1098\0\u10e0\0\u01f8\0\u1128\0\u1170\0\u11b8\0\u1200\0\u1248"+ - "\0\330\0\u1290\0\u12d8\0\u1320\0\u1368\0\u13b0\0\330\0\u13f8"+ - "\0\u1440\0\u1488\0\u14d0\0\u1518\0\u1560\0\u15a8\0\u15f0\0\u1638"+ - "\0\u1680\0\u01f8\0\u01f8\0\u01f8\0\u16c8\0\u1710\0\u1758\0\u17a0"+ - "\0\u17e8\0\330\0\330\0\330\0\u1830\0\330\0\u1878\0\330"+ - "\0\330\0\330\0\330\0\330\0\u18c0\0\330\0\330\0\u1908"+ - "\0\330\0\u1950\0\u1998\0\u19e0\0\u1a28\0\330\0\u1a70\0\u1ab8"+ + "\0\330\0\330\0\u0b88\0\u0bd0\0\u0c18\0\u0c60\0\330\0\u0ca8"+ + "\0\u0cf0\0\u0d38\0\u0d80\0\u0dc8\0\u0e10\0\u0e58\0\u0ea0\0\u0ee8"+ + "\0\u0f30\0\u0f78\0\u0fc0\0\330\0\u1008\0\u1050\0\330\0\u1098"+ + "\0\u10e0\0\u1128\0\u01f8\0\u1170\0\u11b8\0\u1200\0\u1248\0\u1290"+ + "\0\330\0\u12d8\0\u1320\0\u1368\0\u13b0\0\u13f8\0\330\0\u1440"+ + "\0\u1488\0\u14d0\0\u1518\0\u1560\0\u15a8\0\u15f0\0\u1638\0\u1680"+ + "\0\u16c8\0\u01f8\0\u01f8\0\u01f8\0\u1710\0\u1758\0\u17a0\0\u17e8"+ + "\0\u1830\0\330\0\330\0\330\0\u1878\0\330\0\330\0\u18c0"+ + "\0\330\0\330\0\330\0\330\0\330\0\u1908\0\330\0\330"+ + "\0\u1950\0\330\0\u1998\0\u19e0\0\u1a28\0\u1a70\0\330\0\u1ab8"+ "\0\u1b00\0\u1b48\0\u1b90\0\u1bd8\0\u1c20\0\u1c68\0\u1cb0\0\u1cf8"+ - "\0\u1d40\0\u1d88\0\u0e10\0\330\0\u1dd0\0\u1e18\0\u1e60\0\u1ea8"+ - "\0\u1ef0\0\u01f8\0\u1f38\0\u1f80\0\u1fc8\0\u2010\0\u2058\0\u20a0"+ - "\0\u20e8\0\u2130\0\u2178\0\u21c0\0\u2208\0\u2250\0\330\0\u2208"+ - "\0\u2298\0\u01f8\0\u22e0\0\u01f8\0\u01f8\0\u01f8\0\u2328\0\u2370"+ - "\0\u01f8\0\u23b8\0\u2400\0\u2448\0\u2490\0\u24d8\0\330\0\330"+ - "\0\330\0\330\0\u2520\0\u2568\0\u25b0\0\330\0\u2568\0\u25f8"+ - "\0\u2640\0\330\0\u2688\0\u26d0\0\u01f8\0\u2718\0\u2760\0\u27a8"+ - "\0\u27f0\0\u2838\0\u2880\0\u01f8\0\u01f8\0\u28c8\0\u2910\0\u2958"+ - "\0\u29a0\0\u29e8\0\u2a30\0\u2a78\0\u2ac0\0\u2b08\0\u2b50\0\u01f8"+ - "\0\u2b98\0\u2be0\0\u2c28\0\u2c70\0\u2cb8\0\u2d00\0\u2d48\0\u2d90"+ + "\0\u1d40\0\u1d88\0\u1dd0\0\u0e58\0\330\0\u1e18\0\u1e60\0\u1ea8"+ + "\0\u1ef0\0\u1f38\0\u01f8\0\u1f80\0\u1fc8\0\u2010\0\u2058\0\u20a0"+ + "\0\u20e8\0\u2130\0\u2178\0\u21c0\0\u2208\0\u2250\0\u2298\0\330"+ + "\0\u2250\0\u22e0\0\u01f8\0\u2328\0\u01f8\0\u01f8\0\u01f8\0\u2370"+ + "\0\u23b8\0\u01f8\0\u2400\0\u2448\0\u2490\0\u24d8\0\u2520\0\330"+ + "\0\330\0\330\0\330\0\u2568\0\u25b0\0\u25f8\0\330\0\u25b0"+ + "\0\u2640\0\u2688\0\330\0\u26d0\0\u2718\0\u01f8\0\u2760\0\u27a8"+ + "\0\u27f0\0\u2838\0\u2880\0\u28c8\0\u01f8\0\u01f8\0\u2910\0\u2958"+ + "\0\u29a0\0\u29e8\0\u2a30\0\u2a78\0\u2ac0\0\u2b08\0\u2b50\0\u2b98"+ + "\0\u01f8\0\u2be0\0\u2c28\0\u2c70\0\u2cb8\0\u2d00\0\u2d48\0\u2d90"+ "\0\u2dd8\0\u2e20\0\u2e68\0\u2eb0\0\u2ef8\0\u2f40\0\u2f88\0\u2fd0"+ - "\0\u3018\0\u3060\0\u01f8\0\u30a8\0\u30f0\0\u3138\0\u01f8\0\u3180"+ - "\0\u31c8\0\u3210\0\u3258\0\u32a0\0\u32e8\0\u01f8\0\u3330\0\u01f8"+ - "\0\u3378\0\u01f8\0\u33c0\0\u3408\0\u3450\0\u3498\0\u34e0\0\u3528"+ - "\0\u1c20\0\u1d40\0\u3570\0\u35b8\0\u3600\0\u3648\0\u3690\0\u01f8"+ - "\0\u01f8\0\u36d8\0\u3720\0\u3768\0\u37b0\0\u01f8\0\u01f8\0\u01f8"+ - "\0\u01f8\0\u2568\0\u37f8\0\u3840\0\330\0\u3888\0\u38d0\0\u01f8"+ - "\0\u3918\0\330\0\u3720\0\330\0\u3960\0\u39a8\0\u39f0\0\u3a38"+ - "\0\u3a80\0\u3ac8\0\u01f8\0\u3180\0\u3258\0\u3450\0\u3528\0\u3570"+ - "\0\u3648"; + "\0\u3018\0\u3060\0\u30a8\0\u01f8\0\u30f0\0\u3138\0\u3180\0\u01f8"+ + "\0\u31c8\0\u3210\0\u3258\0\u32a0\0\u32e8\0\u3330\0\u01f8\0\u3378"+ + "\0\u01f8\0\u33c0\0\u01f8\0\u3408\0\u3450\0\u3498\0\u34e0\0\u3528"+ + "\0\u3570\0\u1c68\0\u1d88\0\u35b8\0\u3600\0\u3648\0\u3690\0\u36d8"+ + "\0\u01f8\0\u01f8\0\u3720\0\u3768\0\u37b0\0\u37f8\0\u01f8\0\u01f8"+ + "\0\u01f8\0\u01f8\0\u25b0\0\u3840\0\u3888\0\330\0\u38d0\0\u3918"+ + "\0\u01f8\0\u3960\0\330\0\u3768\0\330\0\u39a8\0\u39f0\0\u3a38"+ + "\0\u3a80\0\u3ac8\0\u3b10\0\u01f8\0\u31c8\0\u32a0\0\u3498\0\u3570"+ + "\0\u35b8\0\u3690"; private static int [] zzUnpackRowMap() { - int [] result = new int[297]; + int [] result = new int[298]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -389,185 +456,185 @@ class _PythonLexer implements FlexLexer { "\10\10\1\160\2\0\7\10\1\0\2\10\1\0\5\10"+ "\10\0\16\10\27\0\11\10\2\0\7\10\1\0\2\10"+ "\1\0\5\10\10\0\15\10\1\161\111\0\1\162\107\0"+ - "\1\163\107\0\1\164\1\165\106\0\1\166\1\0\1\167"+ - "\105\0\1\170\107\0\1\171\107\0\1\172\107\0\1\173"+ - "\107\0\1\174\6\0\1\175\100\0\1\176\6\0\1\177"+ - "\1\200\77\0\1\201\34\0\1\202\7\0\1\202\7\0"+ - "\4\202\1\75\1\0\1\76\11\0\1\202\37\0\13\74"+ - "\1\0\26\74\1\0\45\74\13\203\1\0\20\203\1\204"+ - "\1\205\4\203\1\206\45\203\13\207\1\0\21\207\1\210"+ - "\1\211\3\207\1\206\45\207\1\0\7\10\1\212\1\10"+ - "\2\0\4\10\1\212\2\10\1\0\2\10\1\0\1\10"+ - "\4\212\1\103\1\0\1\104\5\0\4\10\1\213\11\10"+ - "\27\0\7\10\1\212\1\10\2\0\4\10\1\212\2\10"+ - "\1\0\2\10\1\0\1\10\4\212\1\103\1\0\1\104"+ - "\5\0\4\10\1\212\11\10\27\0\6\10\1\132\1\212"+ - "\1\133\2\0\4\10\1\212\2\10\1\0\2\10\1\0"+ - "\1\10\4\212\1\103\1\0\1\104\5\0\4\10\1\212"+ - "\11\10\26\0\13\214\1\0\20\214\1\215\1\216\4\214"+ - "\1\0\45\214\13\217\1\0\21\217\1\220\1\221\3\217"+ - "\1\0\45\217\1\0\7\10\1\212\1\10\2\0\4\10"+ - "\1\212\2\10\1\0\1\147\1\10\1\0\1\10\4\212"+ - "\1\103\1\0\1\104\5\0\1\150\3\10\1\212\11\10"+ - "\40\0\1\222\24\0\1\223\2\0\1\224\46\0\1\107"+ - "\1\110\1\107\1\0\1\107\3\0\1\114\7\0\1\114"+ - "\1\0\1\115\2\116\1\0\1\117\61\0\3\110\1\0"+ - "\1\110\15\0\1\115\2\116\1\0\1\117\61\0\5\225"+ - "\2\0\1\225\4\0\1\225\2\0\1\225\3\0\2\225"+ - "\2\0\2\225\12\0\1\225\1\0\1\225\42\0\1\226"+ - "\1\0\1\226\1\0\1\226\103\0\1\227\3\0\1\227"+ - "\103\0\3\115\1\0\1\115\16\0\2\116\1\0\1\117"+ - "\61\0\3\230\1\0\1\230\20\0\1\231\33\0\1\231"+ - "\26\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ - "\10\0\4\10\1\232\11\10\27\0\6\10\1\233\2\10"+ + "\1\163\107\0\1\164\1\165\106\0\1\166\107\0\1\167"+ + "\2\0\1\170\104\0\1\171\107\0\1\172\107\0\1\173"+ + "\107\0\1\174\107\0\1\175\7\0\1\176\77\0\1\177"+ + "\7\0\1\200\1\201\76\0\1\202\34\0\1\203\7\0"+ + "\1\203\7\0\4\203\1\75\1\0\1\76\11\0\1\203"+ + "\37\0\13\74\1\0\26\74\1\0\45\74\13\204\1\0"+ + "\20\204\1\205\1\206\4\204\1\207\45\204\13\210\1\0"+ + "\21\210\1\211\1\212\3\210\1\207\45\210\1\0\7\10"+ + "\1\213\1\10\2\0\4\10\1\213\2\10\1\0\2\10"+ + "\1\0\1\10\4\213\1\103\1\0\1\104\5\0\4\10"+ + "\1\214\11\10\27\0\7\10\1\213\1\10\2\0\4\10"+ + "\1\213\2\10\1\0\2\10\1\0\1\10\4\213\1\103"+ + "\1\0\1\104\5\0\4\10\1\213\11\10\27\0\6\10"+ + "\1\132\1\213\1\133\2\0\4\10\1\213\2\10\1\0"+ + "\2\10\1\0\1\10\4\213\1\103\1\0\1\104\5\0"+ + "\4\10\1\213\11\10\26\0\13\215\1\0\20\215\1\216"+ + "\1\217\4\215\1\0\45\215\13\220\1\0\21\220\1\221"+ + "\1\222\3\220\1\0\45\220\1\0\7\10\1\213\1\10"+ + "\2\0\4\10\1\213\2\10\1\0\1\147\1\10\1\0"+ + "\1\10\4\213\1\103\1\0\1\104\5\0\1\150\3\10"+ + "\1\213\11\10\40\0\1\223\24\0\1\224\2\0\1\225"+ + "\46\0\1\107\1\110\1\107\1\0\1\107\3\0\1\114"+ + "\7\0\1\114\1\0\1\115\2\116\1\0\1\117\61\0"+ + "\3\110\1\0\1\110\15\0\1\115\2\116\1\0\1\117"+ + "\61\0\5\226\2\0\1\226\4\0\1\226\2\0\1\226"+ + "\3\0\2\226\2\0\2\226\12\0\1\226\1\0\1\226"+ + "\42\0\1\227\1\0\1\227\1\0\1\227\103\0\1\230"+ + "\3\0\1\230\103\0\3\115\1\0\1\115\16\0\2\116"+ + "\1\0\1\117\61\0\3\231\1\0\1\231\20\0\1\232"+ + "\33\0\1\232\26\0\11\10\2\0\7\10\1\0\2\10"+ + "\1\0\5\10\10\0\4\10\1\233\11\10\27\0\6\10"+ + "\1\234\2\10\2\0\7\10\1\0\2\10\1\0\5\10"+ + "\10\0\16\10\27\0\11\10\2\0\7\10\1\0\2\10"+ + "\1\0\5\10\10\0\1\10\1\235\14\10\27\0\7\10"+ + "\1\236\1\10\2\0\4\10\1\236\2\10\1\0\2\10"+ + "\1\0\1\10\4\236\1\22\1\0\1\24\5\0\4\10"+ + "\1\236\11\10\27\0\7\10\1\236\1\10\2\0\4\10"+ + "\1\236\2\10\1\0\1\237\1\10\1\0\1\10\4\236"+ + "\1\22\1\0\1\24\5\0\4\10\1\236\11\10\27\0"+ + "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ + "\12\10\1\240\3\10\27\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\1\10\1\241\3\10\10\0\16\10\27\0"+ + "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ + "\3\10\1\242\3\10\1\243\6\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\1\10\1\244"+ + "\14\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ + "\5\10\10\0\1\245\15\10\26\0\13\134\1\0\20\134"+ + "\1\246\1\136\4\134\1\137\45\134\34\0\1\247\1\250"+ + "\1\0\2\251\1\0\2\137\44\0\110\134\13\140\1\0"+ + "\21\140\1\141\1\246\3\140\1\137\155\140\35\0\1\250"+ + "\1\252\2\251\1\0\2\137\45\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\2\10\1\253\13\10"+ + "\27\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ + "\10\0\3\10\1\254\12\10\27\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\5\10\1\255\10\10"+ + "\27\0\3\10\1\256\4\10\1\257\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\16\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\5\10\1\260"+ + "\10\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ + "\5\10\10\0\7\10\1\261\6\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\11\10\1\262"+ + "\4\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ + "\5\10\10\0\10\10\1\263\5\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\3\10\1\264"+ + "\12\10\27\0\11\10\2\0\7\10\1\0\1\265\1\10"+ + "\1\0\5\10\10\0\16\10\27\0\6\10\1\266\2\10"+ "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\16\10"+ "\27\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ - "\10\0\1\10\1\234\14\10\27\0\7\10\1\235\1\10"+ - "\2\0\4\10\1\235\2\10\1\0\2\10\1\0\1\10"+ - "\4\235\1\22\1\0\1\24\5\0\4\10\1\235\11\10"+ - "\27\0\7\10\1\235\1\10\2\0\4\10\1\235\2\10"+ - "\1\0\1\236\1\10\1\0\1\10\4\235\1\22\1\0"+ - "\1\24\5\0\4\10\1\235\11\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\12\10\1\237"+ - "\3\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\1\10\1\240\3\10\10\0\16\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\3\10\1\241"+ - "\3\10\1\242\6\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\1\10\1\243\14\10\27\0"+ + "\10\0\7\10\1\267\6\10\111\0\1\270\107\0\1\271"+ + "\107\0\1\272\107\0\1\273\34\0\1\274\7\0\1\274"+ + "\7\0\4\274\1\75\1\0\1\76\11\0\1\274\37\0"+ + "\13\204\1\0\20\204\1\275\1\206\4\204\1\207\45\204"+ + "\34\0\1\276\1\277\1\0\2\300\1\0\2\207\44\0"+ + "\110\204\13\210\1\0\21\210\1\211\1\275\3\210\1\207"+ + "\155\210\35\0\1\277\1\301\2\300\1\0\2\207\45\0"+ + "\7\10\1\302\1\10\2\0\4\10\1\302\2\10\1\0"+ + "\2\10\1\0\1\10\4\302\1\103\1\0\1\104\5\0"+ + "\4\10\1\302\11\10\27\0\7\10\1\302\1\10\2\0"+ + "\4\10\1\302\2\10\1\0\1\237\1\10\1\0\1\10"+ + "\4\302\1\103\1\0\1\104\5\0\4\10\1\302\11\10"+ + "\26\0\13\215\1\0\20\215\1\303\1\217\4\215\1\0"+ + "\45\215\34\0\1\304\53\0\110\215\13\220\1\0\21\220"+ + "\1\221\1\303\3\220\1\0\155\220\36\0\1\305\51\0"+ + "\13\223\1\0\26\223\1\225\45\223\1\0\5\226\2\0"+ + "\1\226\1\114\3\0\1\226\2\0\1\226\1\114\2\0"+ + "\2\226\2\0\2\226\12\0\1\226\1\0\1\226\42\0"+ + "\1\227\1\0\1\227\1\0\1\227\3\0\1\114\7\0"+ + "\1\114\67\0\1\230\3\0\1\230\3\0\1\114\7\0"+ + "\1\114\67\0\3\231\1\0\1\231\21\0\1\117\61\0"+ + "\3\231\1\0\1\231\103\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\12\10\1\306\3\10\27\0"+ "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ - "\1\244\15\10\26\0\13\134\1\0\20\134\1\245\1\136"+ - "\4\134\1\137\45\134\34\0\1\246\1\247\1\0\2\250"+ - "\1\0\2\137\44\0\110\134\13\140\1\0\21\140\1\141"+ - "\1\245\3\140\1\137\155\140\35\0\1\247\1\251\2\250"+ - "\1\0\2\137\45\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\2\10\1\252\13\10\27\0\11\10"+ - "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\3\10"+ - "\1\253\12\10\27\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\5\10\1\254\10\10\27\0\3\10"+ - "\1\255\4\10\1\256\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\16\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\5\10\1\257\10\10\27\0"+ + "\1\307\15\10\27\0\11\10\2\0\7\10\1\0\2\10"+ + "\1\0\5\10\1\310\1\0\1\311\5\0\16\10\27\0"+ "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ - "\7\10\1\260\6\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\11\10\1\261\4\10\27\0"+ - "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ - "\10\10\1\262\5\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\3\10\1\263\12\10\27\0"+ - "\11\10\2\0\7\10\1\0\1\264\1\10\1\0\5\10"+ - "\10\0\16\10\27\0\6\10\1\265\2\10\2\0\7\10"+ + "\1\312\15\10\27\0\7\10\1\313\1\10\2\0\7\10"+ "\1\0\2\10\1\0\5\10\10\0\16\10\27\0\11\10"+ - "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\7\10"+ - "\1\266\6\10\111\0\1\267\107\0\1\270\107\0\1\271"+ - "\107\0\1\272\34\0\1\273\7\0\1\273\7\0\4\273"+ - "\1\75\1\0\1\76\11\0\1\273\37\0\13\203\1\0"+ - "\20\203\1\274\1\205\4\203\1\206\45\203\34\0\1\275"+ - "\1\276\1\0\2\277\1\0\2\206\44\0\110\203\13\207"+ - "\1\0\21\207\1\210\1\274\3\207\1\206\155\207\35\0"+ - "\1\276\1\300\2\277\1\0\2\206\45\0\7\10\1\301"+ - "\1\10\2\0\4\10\1\301\2\10\1\0\2\10\1\0"+ - "\1\10\4\301\1\103\1\0\1\104\5\0\4\10\1\301"+ - "\11\10\27\0\7\10\1\301\1\10\2\0\4\10\1\301"+ - "\2\10\1\0\1\236\1\10\1\0\1\10\4\301\1\103"+ - "\1\0\1\104\5\0\4\10\1\301\11\10\26\0\13\214"+ - "\1\0\20\214\1\302\1\216\4\214\1\0\45\214\34\0"+ - "\1\303\53\0\110\214\13\217\1\0\21\217\1\220\1\302"+ - "\3\217\1\0\155\217\36\0\1\304\51\0\13\222\1\0"+ - "\26\222\1\224\45\222\1\0\5\225\2\0\1\225\1\114"+ - "\3\0\1\225\2\0\1\225\1\114\2\0\2\225\2\0"+ - "\2\225\12\0\1\225\1\0\1\225\42\0\1\226\1\0"+ - "\1\226\1\0\1\226\3\0\1\114\7\0\1\114\67\0"+ - "\1\227\3\0\1\227\3\0\1\114\7\0\1\114\67\0"+ - "\3\230\1\0\1\230\21\0\1\117\61\0\3\230\1\0"+ - "\1\230\103\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\12\10\1\305\3\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\1\306\15\10"+ + "\2\0\7\10\1\0\1\314\1\10\1\0\5\10\10\0"+ + "\16\10\27\0\11\10\2\0\7\10\1\0\1\315\1\10"+ + "\1\0\5\10\10\0\16\10\27\0\3\10\1\316\5\10"+ + "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\16\10"+ "\27\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ - "\1\307\1\0\1\310\5\0\16\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\1\311\15\10"+ - "\27\0\7\10\1\312\1\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\16\10\27\0\11\10\2\0\7\10"+ - "\1\0\1\313\1\10\1\0\5\10\10\0\16\10\27\0"+ - "\11\10\2\0\7\10\1\0\1\314\1\10\1\0\5\10"+ - "\10\0\16\10\27\0\3\10\1\315\5\10\2\0\7\10"+ - "\1\0\2\10\1\0\5\10\10\0\16\10\27\0\11\10"+ - "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\5\10"+ - "\1\316\10\10\27\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\3\10\1\317\12\10\63\0\1\247"+ - "\1\0\2\250\1\0\2\137\44\0\34\246\1\320\1\321"+ - "\52\246\35\251\1\322\1\323\51\251\1\0\11\10\2\0"+ - "\7\10\1\0\1\324\1\10\1\0\5\10\10\0\16\10"+ - "\27\0\11\10\2\0\7\10\1\0\2\10\1\0\4\10"+ - "\1\325\10\0\16\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\3\10\1\326\12\10\27\0"+ - "\6\10\1\327\2\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\16\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\3\10\1\330\12\10\27\0"+ - "\10\10\1\331\2\0\7\10\1\0\2\10\1\0\5\10"+ - "\10\0\16\10\27\0\7\10\1\332\1\10\2\0\7\10"+ - "\1\0\2\10\1\0\5\10\10\0\16\10\27\0\10\10"+ - "\1\333\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ - "\16\10\62\0\1\334\1\0\1\335\106\0\1\276\1\0"+ - "\2\277\1\0\2\206\44\0\34\275\1\336\1\337\52\275"+ - "\35\300\1\340\1\341\51\300\1\0\11\10\2\0\7\10"+ - "\1\0\2\10\1\0\5\10\1\342\1\0\1\343\5\0"+ - "\16\10\26\0\34\303\1\344\1\345\52\303\35\304\1\346"+ - "\1\347\51\304\1\0\10\10\1\350\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\16\10\62\0\1\351\111\0"+ - "\1\352\52\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\6\10\1\353\7\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\2\10\1\354"+ - "\13\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\10\10\1\355\5\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\7\10\1\356"+ - "\6\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\3\10\1\357\12\10\26\0\34\246\1\360"+ - "\1\361\162\246\145\251\1\362\1\363\51\251\1\0\11\10"+ - "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\4\10"+ - "\1\364\11\10\27\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\4\10\1\365\11\10\27\0\11\10"+ - "\2\0\7\10\1\0\1\366\1\10\1\0\5\10\10\0"+ - "\16\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\4\10\1\367\11\10\27\0\11\10\2\0"+ - "\7\10\1\0\2\10\1\0\5\10\10\0\2\10\1\370"+ - "\13\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ - "\5\10\10\0\1\371\15\10\27\0\11\10\2\0\7\10"+ - "\1\0\1\372\1\10\1\0\5\10\10\0\16\10\62\0"+ - "\1\373\111\0\1\374\51\0\34\275\1\375\1\376\162\275"+ - "\145\300\1\377\1\u0100\51\300\34\0\1\u0101\111\0\1\u0102"+ - "\51\0\34\303\1\u0103\1\u0104\162\303\145\304\1\u0105\1\u0106"+ - "\51\304\1\0\10\10\1\u0107\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\16\10\62\0\1\246\111\0\1\251"+ - "\52\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ - "\10\0\1\u0108\15\10\27\0\11\10\2\0\7\10\1\0"+ - "\2\10\1\0\5\10\10\0\5\10\1\u0109\10\10\27\0"+ + "\10\0\5\10\1\317\10\10\27\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\3\10\1\320\12\10"+ + "\63\0\1\250\1\0\2\251\1\0\2\137\44\0\34\247"+ + "\1\321\1\322\52\247\35\252\1\323\1\324\51\252\1\0"+ + "\11\10\2\0\7\10\1\0\1\325\1\10\1\0\5\10"+ + "\10\0\16\10\27\0\11\10\2\0\7\10\1\0\2\10"+ + "\1\0\4\10\1\326\10\0\16\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\3\10\1\327"+ + "\12\10\27\0\6\10\1\330\2\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\16\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\3\10\1\331"+ + "\12\10\27\0\10\10\1\332\2\0\7\10\1\0\2\10"+ + "\1\0\5\10\10\0\16\10\27\0\7\10\1\333\1\10"+ + "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\16\10"+ + "\27\0\10\10\1\334\2\0\7\10\1\0\2\10\1\0"+ + "\5\10\10\0\16\10\62\0\1\335\1\0\1\336\106\0"+ + "\1\277\1\0\2\300\1\0\2\207\44\0\34\276\1\337"+ + "\1\340\52\276\35\301\1\341\1\342\51\301\1\0\11\10"+ + "\2\0\7\10\1\0\2\10\1\0\5\10\1\343\1\0"+ + "\1\344\5\0\16\10\26\0\34\304\1\345\1\346\52\304"+ + "\35\305\1\347\1\350\51\305\1\0\10\10\1\351\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\16\10\62\0"+ + "\1\352\111\0\1\353\52\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\6\10\1\354\7\10\27\0"+ "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ - "\1\10\1\u010a\14\10\26\0\34\246\1\u010b\1\361\106\246"+ - "\1\u010c\1\361\52\246\35\251\1\362\1\u010d\106\251\1\362"+ - "\1\u010b\51\251\1\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\5\10\1\u010e\10\10\27\0\11\10"+ - "\2\0\7\10\1\0\2\10\1\0\5\10\10\0\1\10"+ - "\1\u010f\14\10\27\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\5\10\1\u0110\10\10\27\0\10\10"+ - "\1\u0111\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ - "\16\10\62\0\1\275\111\0\1\300\51\0\34\275\1\u0112"+ - "\1\376\106\275\1\u0113\1\376\52\275\35\300\1\377\1\u0114"+ - "\106\300\1\377\1\u0112\51\300\34\303\1\u0115\1\u0104\106\303"+ - "\1\u0116\1\u0104\52\303\35\304\1\u0105\1\u0117\106\304\1\u0105"+ - "\1\u0115\51\304\1\0\11\10\2\0\7\10\1\0\2\10"+ - "\1\0\5\10\10\0\11\10\1\u0118\4\10\27\0\11\10"+ - "\2\0\7\10\1\0\2\10\1\0\4\10\1\u0119\10\0"+ - "\16\10\63\0\1\u011a\1\0\2\u011b\1\0\2\u011c\44\0"+ - "\34\246\1\u011d\1\361\52\246\35\251\1\362\1\u011e\51\251"+ - "\34\275\1\u011f\1\376\52\275\35\300\1\377\1\u0120\51\300"+ - "\34\303\1\u0121\1\u0104\52\303\35\304\1\u0105\1\u0122\51\304"+ - "\1\0\11\10\2\0\7\10\1\0\1\u0123\1\10\1\0"+ - "\5\10\10\0\16\10\26\0\34\246\1\u0124\1\361\52\246"+ - "\35\251\1\362\1\u0125\51\251\34\275\1\u0126\1\376\52\275"+ - "\35\300\1\377\1\u0127\51\300\34\303\1\u0128\1\u0104\52\303"+ - "\35\304\1\u0105\1\u0129\51\304"; + "\2\10\1\355\13\10\27\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\10\10\1\356\5\10\27\0"+ + "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ + "\7\10\1\357\6\10\27\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\3\10\1\360\12\10\26\0"+ + "\34\247\1\361\1\362\162\247\145\252\1\363\1\364\51\252"+ + "\1\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ + "\10\0\4\10\1\365\11\10\27\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\4\10\1\366\11\10"+ + "\27\0\11\10\2\0\7\10\1\0\1\367\1\10\1\0"+ + "\5\10\10\0\16\10\27\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\4\10\1\370\11\10\27\0"+ + "\11\10\2\0\7\10\1\0\2\10\1\0\5\10\10\0"+ + "\2\10\1\371\13\10\27\0\11\10\2\0\7\10\1\0"+ + "\2\10\1\0\5\10\10\0\1\372\15\10\27\0\11\10"+ + "\2\0\7\10\1\0\1\373\1\10\1\0\5\10\10\0"+ + "\16\10\62\0\1\374\111\0\1\375\51\0\34\276\1\376"+ + "\1\377\162\276\145\301\1\u0100\1\u0101\51\301\34\0\1\u0102"+ + "\111\0\1\u0103\51\0\34\304\1\u0104\1\u0105\162\304\145\305"+ + "\1\u0106\1\u0107\51\305\1\0\10\10\1\u0108\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\16\10\62\0\1\247"+ + "\111\0\1\252\52\0\11\10\2\0\7\10\1\0\2\10"+ + "\1\0\5\10\10\0\1\u0109\15\10\27\0\11\10\2\0"+ + "\7\10\1\0\2\10\1\0\5\10\10\0\5\10\1\u010a"+ + "\10\10\27\0\11\10\2\0\7\10\1\0\2\10\1\0"+ + "\5\10\10\0\1\10\1\u010b\14\10\26\0\34\247\1\u010c"+ + "\1\362\106\247\1\u010d\1\362\52\247\35\252\1\363\1\u010e"+ + "\106\252\1\363\1\u010c\51\252\1\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\5\10\1\u010f\10\10"+ + "\27\0\11\10\2\0\7\10\1\0\2\10\1\0\5\10"+ + "\10\0\1\10\1\u0110\14\10\27\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\5\10\1\u0111\10\10"+ + "\27\0\10\10\1\u0112\2\0\7\10\1\0\2\10\1\0"+ + "\5\10\10\0\16\10\62\0\1\276\111\0\1\301\51\0"+ + "\34\276\1\u0113\1\377\106\276\1\u0114\1\377\52\276\35\301"+ + "\1\u0100\1\u0115\106\301\1\u0100\1\u0113\51\301\34\304\1\u0116"+ + "\1\u0105\106\304\1\u0117\1\u0105\52\304\35\305\1\u0106\1\u0118"+ + "\106\305\1\u0106\1\u0116\51\305\1\0\11\10\2\0\7\10"+ + "\1\0\2\10\1\0\5\10\10\0\11\10\1\u0119\4\10"+ + "\27\0\11\10\2\0\7\10\1\0\2\10\1\0\4\10"+ + "\1\u011a\10\0\16\10\63\0\1\u011b\1\0\2\u011c\1\0"+ + "\2\u011d\44\0\34\247\1\u011e\1\362\52\247\35\252\1\363"+ + "\1\u011f\51\252\34\276\1\u0120\1\377\52\276\35\301\1\u0100"+ + "\1\u0121\51\301\34\304\1\u0122\1\u0105\52\304\35\305\1\u0106"+ + "\1\u0123\51\305\1\0\11\10\2\0\7\10\1\0\1\u0124"+ + "\1\10\1\0\5\10\10\0\16\10\26\0\34\247\1\u0125"+ + "\1\362\52\247\35\252\1\363\1\u0126\51\252\34\276\1\u0127"+ + "\1\377\52\276\35\301\1\u0100\1\u0128\51\301\34\304\1\u0129"+ + "\1\u0105\52\304\35\305\1\u0106\1\u012a\51\305"; private static int [] zzUnpackTrans() { - int [] result = new int[15120]; + int [] result = new int[15192]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -608,9 +675,9 @@ class _PythonLexer implements FlexLexer { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\16\1\1\11\1\1\5\11\25\1\14\11"+ + "\3\0\1\11\16\1\1\11\1\1\5\11\26\1\13\11"+ "\4\1\1\11\10\1\4\0\1\11\1\1\1\0\1\11"+ - "\11\1\1\11\5\1\1\11\22\1\3\11\1\1\1\11"+ + "\11\1\1\11\5\1\1\11\22\1\3\11\1\1\2\11"+ "\1\1\5\11\1\1\2\11\1\1\1\11\1\0\3\1"+ "\1\11\13\1\2\0\1\11\4\1\1\0\15\1\1\11"+ "\1\0\16\1\4\11\1\0\2\1\1\11\1\0\2\1"+ @@ -620,7 +687,7 @@ class _PythonLexer implements FlexLexer { "\1\11\4\1\1\11\1\0\1\11\6\0\7\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[297]; + int [] result = new int[298]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -713,7 +780,7 @@ return yylength()-s.length(); char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 3338) { + while (i < 4678) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -935,410 +1002,414 @@ return yylength()-s.length(); zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 89: + case 90: { return PyTokenTypes.YIELD_KEYWORD; } - case 100: break; - case 84: + case 101: break; + case 85: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING; yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; } - case 101: break; + case 102: break; case 2: { return PyTokenTypes.INTEGER_LITERAL; } - case 102: break; - case 17: - { return PyTokenTypes.DIV; - } case 103: break; case 18: - { return PyTokenTypes.PERC; + { return PyTokenTypes.DIV; } case 104: break; + case 19: + { return PyTokenTypes.PERC; + } + case 105: break; case 8: { return PyTokenTypes.BACKSLASH; } - case 105: break; - case 26: + case 106: break; + case 27: { return PyTokenTypes.RPAR; } - case 106: break; + case 107: break; case 1: { return PyTokenTypes.BAD_CHARACTER; } - case 107: break; - case 29: + case 108: break; + case 30: { return PyTokenTypes.LBRACE; } - case 108: break; - case 35: - { yypushback(1); yybegin(YYINITIAL); - } case 109: break; - case 71: + case 72: { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; } case 110: break; - case 87: - { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; + case 35: + { yypushback(1); yybegin(YYINITIAL); } case 111: break; - case 79: - { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; + case 88: + { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; } case 112: break; + case 80: + { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; + } + case 113: break; case 6: { return PyTokenTypes.MINUS; } - case 113: break; + case 114: break; case 7: { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING; else return PyTokenTypes.SINGLE_QUOTED_STRING; } - case 114: break; - case 86: + case 115: break; + case 87: { return PyTokenTypes.BREAK_KEYWORD; } - case 115: break; - case 28: + case 116: break; + case 29: { return PyTokenTypes.RBRACKET; } - case 116: break; - case 64: + case 117: break; + case 65: { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; } - case 117: break; + case 118: break; case 5: { return PyTokenTypes.DOT; } - case 118: break; + case 119: break; case 3: { return PyTokenTypes.IDENTIFIER; } - case 119: break; - case 25: + case 120: break; + case 26: { return PyTokenTypes.LPAR; } - case 120: break; - case 23: + case 121: break; + case 24: { return PyTokenTypes.LT; } - case 121: break; + case 122: break; case 46: { return PyTokenTypes.IN_KEYWORD; } - case 122: break; - case 88: + case 123: break; + case 89: { return PyTokenTypes.RAISE_KEYWORD; } - case 123: break; - case 76: + case 124: break; + case 77: { return PyTokenTypes.GTGTEQ; } - case 124: break; + case 125: break; case 9: { return PyTokenTypes.SPACE; } - case 125: break; - case 92: + case 126: break; + case 93: { return PyTokenTypes.EXCEPT_KEYWORD; } - case 126: break; + case 127: break; case 41: { return PyTokenTypes.IMAGINARY_LITERAL; } - case 127: break; + case 128: break; case 39: { return PyTokenTypes.SINGLE_QUOTED_STRING; } - case 128: break; + case 129: break; case 11: { return PyTokenTypes.FORMFEED; } - case 129: break; + case 130: break; case 13: { return PyTokenTypes.SEMICOLON; } - case 130: break; - case 22: + case 131: break; + case 23: { return PyTokenTypes.GT; } - case 131: break; - case 27: + case 132: break; + case 28: { return PyTokenTypes.LBRACKET; } - case 132: break; + case 133: break; case 33: { return PyTokenTypes.COLON; } - case 133: break; - case 77: + case 134: break; + case 78: { return PyTokenTypes.LTLTEQ; } - case 134: break; - case 82: - { return PyTokenTypes.ELSE_KEYWORD; - } case 135: break; - case 20: - { return PyTokenTypes.OR; + case 52: + { return PyTokenTypes.ATEQ; } case 136: break; - case 68: + case 83: + { return PyTokenTypes.ELSE_KEYWORD; + } + case 137: break; + case 21: + { return PyTokenTypes.OR; + } + case 138: break; + case 69: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING; yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; } - case 137: break; - case 67: + case 139: break; + case 68: { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING; else return PyTokenTypes.TRIPLE_QUOTED_STRING; } - case 138: break; + case 140: break; case 50: { return PyTokenTypes.MULTEQ; } - case 139: break; - case 97: + case 141: break; + case 98: { return PyTokenTypes.FINALLY_KEYWORD; } - case 140: break; - case 90: + case 142: break; + case 91: { return PyTokenTypes.WHILE_KEYWORD; } - case 141: break; + case 143: break; case 16: { return PyTokenTypes.MULT; } - case 142: break; - case 93: + case 144: break; + case 94: { return PyTokenTypes.ASSERT_KEYWORD; } - case 143: break; - case 53: + case 145: break; + case 54: { return PyTokenTypes.FLOORDIV; } - case 144: break; - case 96: + case 146: break; + case 97: { return PyTokenTypes.GLOBAL_KEYWORD; } - case 145: break; + case 147: break; case 37: { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.SINGLE_QUOTED_STRING; } - case 146: break; - case 91: + case 148: break; + case 92: { return PyTokenTypes.LAMBDA_KEYWORD; } - case 147: break; - case 57: + case 149: break; + case 58: { return PyTokenTypes.XOREQ; } - case 148: break; - case 66: + case 150: break; + case 67: { return PyTokenTypes.FOR_KEYWORD; } - case 149: break; - case 31: + case 151: break; + case 17: { return PyTokenTypes.AT; } - case 150: break; - case 70: + case 152: break; + case 71: { return PyTokenTypes.NOT_KEYWORD; } - case 151: break; + case 153: break; case 14: { return PyTokenTypes.PLUS; } - case 152: break; + case 154: break; case 43: { return PyTokenTypes.MINUSEQ; } - case 153: break; - case 63: + case 155: break; + case 64: { return PyTokenTypes.NE; } - case 154: break; + case 156: break; case 32: { return PyTokenTypes.COMMA; } - case 155: break; + case 157: break; case 49: { return PyTokenTypes.EQEQ; } - case 156: break; + case 158: break; case 34: { return PyTokenTypes.TICK; } - case 157: break; + case 159: break; case 51: { return PyTokenTypes.EXP; } - case 158: break; - case 80: + case 160: break; + case 81: { return PyTokenTypes.TRIPLE_QUOTED_STRING; } - case 159: break; - case 99: + case 161: break; + case 100: { return PyTokenTypes.CONTINUE_KEYWORD; } - case 160: break; - case 62: + case 162: break; + case 63: { return PyTokenTypes.LTLT; } - case 161: break; - case 60: + case 163: break; + case 61: { return PyTokenTypes.LE; } - case 162: break; - case 69: + case 164: break; + case 70: { return PyTokenTypes.AND_KEYWORD; } - case 163: break; + case 165: break; case 42: { return PyTokenTypes.OR_KEYWORD; } - case 164: break; + case 166: break; case 4: { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; } - case 165: break; + case 167: break; case 44: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING; return PyTokenTypes.DOCSTRING; } - case 166: break; - case 85: + case 168: break; + case 86: { return PyTokenTypes.PASS_KEYWORD; } - case 167: break; - case 65: + case 169: break; + case 66: { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; } - case 168: break; + case 170: break; case 36: { return PyTokenTypes.END_OF_LINE_COMMENT; } - case 169: break; - case 98: + case 171: break; + case 99: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING; return PyTokenTypes.DOCSTRING; } - case 170: break; - case 56: + case 172: break; + case 57: { return PyTokenTypes.OREQ; } - case 171: break; - case 59: + case 173: break; + case 60: { return PyTokenTypes.GTGT; } - case 172: break; - case 19: + case 174: break; + case 20: { return PyTokenTypes.AND; } - case 173: break; - case 52: + case 175: break; + case 53: { return PyTokenTypes.DIVEQ; } - case 174: break; - case 94: + case 176: break; + case 95: { return PyTokenTypes.RETURN_KEYWORD; } - case 175: break; - case 95: + case 177: break; + case 96: { return PyTokenTypes.IMPORT_KEYWORD; } - case 176: break; - case 58: + case 178: break; + case 59: { return PyTokenTypes.GE; } - case 177: break; + case 179: break; case 48: { return PyTokenTypes.PLUSEQ; } - case 178: break; - case 78: + case 180: break; + case 79: { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; } - case 179: break; + case 181: break; case 47: { return PyTokenTypes.IS_KEYWORD; } - case 180: break; - case 75: + case 182: break; + case 76: { return PyTokenTypes.FLOORDIVEQ; } - case 181: break; + case 183: break; case 40: { return PyTokenTypes.FLOAT_LITERAL; } - case 182: break; + case 184: break; case 38: { return PyTokenTypes.LINE_BREAK; } - case 183: break; - case 54: - { return PyTokenTypes.PERCEQ; - } - case 184: break; - case 73: - { return PyTokenTypes.TRY_KEYWORD; - } case 185: break; case 55: - { return PyTokenTypes.ANDEQ; + { return PyTokenTypes.PERCEQ; } case 186: break; + case 74: + { return PyTokenTypes.TRY_KEYWORD; + } + case 187: break; + case 56: + { return PyTokenTypes.ANDEQ; + } + case 188: break; case 15: { return PyTokenTypes.EQ; } - case 187: break; - case 81: + case 189: break; + case 82: { return PyTokenTypes.FROM_KEYWORD; } - case 188: break; + case 190: break; case 12: { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; } - case 189: break; - case 74: + case 191: break; + case 75: { return PyTokenTypes.EXPEQ; } - case 190: break; - case 83: + case 192: break; + case 84: { return PyTokenTypes.ELIF_KEYWORD; } - case 191: break; - case 30: + case 193: break; + case 31: { return PyTokenTypes.RBRACE; } - case 192: break; + case 194: break; case 45: { return PyTokenTypes.IF_KEYWORD; } - case 193: break; + case 195: break; case 10: { return PyTokenTypes.TAB; } - case 194: break; - case 61: + case 196: break; + case 62: { return PyTokenTypes.NE_OLD; } - case 195: break; - case 24: + case 197: break; + case 25: { return PyTokenTypes.TILDE; } - case 196: break; - case 72: + case 198: break; + case 73: { return PyTokenTypes.DEL_KEYWORD; } - case 197: break; - case 21: + case 199: break; + case 22: { return PyTokenTypes.XOR; } - case 198: break; + case 200: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java b/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java index 630668388aed..f1f73a969fd9 100644 --- a/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java +++ b/python/psi-api/src/com/jetbrains/python/PyTokenTypes.java @@ -128,6 +128,7 @@ public class PyTokenTypes { public static final PyElementType PLUSEQ = new PyElementType("PLUSEQ");// += public static final PyElementType MINUSEQ = new PyElementType("MINUSEQ");// -= public static final PyElementType MULTEQ = new PyElementType("MULTEQ");// *= + public static final PyElementType ATEQ = new PyElementType("ATEQ"); // @= public static final PyElementType DIVEQ = new PyElementType("DIVEQ"); // /= public static final PyElementType FLOORDIVEQ = new PyElementType("FLOORDIVEQ"); // //= public static final PyElementType PERCEQ = new PyElementType("PERCEQ");// %= @@ -139,10 +140,10 @@ public class PyTokenTypes { public static final PyElementType EXPEQ = new PyElementType("EXPEQ");// **= public static final TokenSet OPERATIONS = TokenSet.create( - PLUS, MINUS, MULT, EXP, DIV, FLOORDIV, PERC, LTLT, GTGT, AND, OR, + PLUS, MINUS, MULT, AT, EXP, DIV, FLOORDIV, PERC, LTLT, GTGT, AND, OR, XOR, TILDE, LT, GT, LE, GE, EQEQ, NE, NE_OLD, AT, COLON, TICK, EQ, PLUSEQ, MINUSEQ, - MULTEQ, DIVEQ, FLOORDIVEQ, PERCEQ, ANDEQ, OREQ, XOREQ, LTLTEQ, GTGTEQ, + MULTEQ, ATEQ, DIVEQ, FLOORDIVEQ, PERCEQ, ANDEQ, OREQ, XOREQ, LTLTEQ, GTGTEQ, EXPEQ); public static final TokenSet COMPARISON_OPERATIONS = TokenSet.create( @@ -150,8 +151,8 @@ public class PyTokenTypes { public static final TokenSet SHIFT_OPERATIONS = TokenSet.create(LTLT, GTGT); public static final TokenSet ADDITIVE_OPERATIONS = TokenSet.create(PLUS, MINUS); - public static final TokenSet MULTIPLICATIVE_OPERATIONS = TokenSet.create(MULT, FLOORDIV, DIV, PERC); - public static final TokenSet MULTIPLICATIVE_OR_EXP = TokenSet.create(MULT, FLOORDIV, DIV, PERC, EXP); + public static final TokenSet MULTIPLICATIVE_OPERATIONS = TokenSet.create(MULT, AT, FLOORDIV, DIV, PERC); + public static final TokenSet MULTIPLICATIVE_OR_EXP = TokenSet.create(MULT, AT, FLOORDIV, DIV, PERC, EXP); public static final TokenSet UNARY_OPERATIONS = TokenSet.create(PLUS, MINUS, TILDE); public static final TokenSet BITWISE_OPERATIONS = TokenSet.create(AND, OR, XOR); public static final TokenSet EQUALITY_OPERATIONS = TokenSet.create(EQEQ, NE, NE_OLD); @@ -162,7 +163,7 @@ public class PyTokenTypes { public static final TokenSet OPEN_BRACES = TokenSet.create(LBRACKET, LBRACE, LPAR); public static final TokenSet CLOSE_BRACES = TokenSet.create(RBRACKET, RBRACE, RPAR); - public static final TokenSet AUG_ASSIGN_OPERATIONS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, DIVEQ, + public static final TokenSet AUG_ASSIGN_OPERATIONS = TokenSet.create(PLUSEQ, MINUSEQ, MULTEQ, ATEQ, DIVEQ, PERCEQ, EXPEQ, GTGTEQ, LTLTEQ, ANDEQ, OREQ, XOREQ, FLOORDIVEQ); public static final PyElementType BACKSLASH = new PyElementType("BACKSLASH"); diff --git a/python/src/com/jetbrains/python/PyElementTypes.java b/python/src/com/jetbrains/python/PyElementTypes.java index 7a713524f6c4..400e21b178c7 100644 --- a/python/src/com/jetbrains/python/PyElementTypes.java +++ b/python/src/com/jetbrains/python/PyElementTypes.java @@ -127,7 +127,8 @@ public interface PyElementTypes { PyTokenTypes.OR, PyTokenTypes.XOR, PyTokenTypes.AND, PyTokenTypes.LTLT, PyTokenTypes.GTGT, PyTokenTypes.EQEQ, PyTokenTypes.GE, PyTokenTypes.LE, PyTokenTypes.NE, PyTokenTypes.NE_OLD, PyTokenTypes.IN_KEYWORD, PyTokenTypes.IS_KEYWORD, PyTokenTypes.NOT_KEYWORD, PyTokenTypes.PLUS, - PyTokenTypes.MINUS, PyTokenTypes.MULT, PyTokenTypes.FLOORDIV, PyTokenTypes.DIV, PyTokenTypes.PERC, PyTokenTypes.EXP); + PyTokenTypes.MINUS, PyTokenTypes.MULT, PyTokenTypes.AT, PyTokenTypes.FLOORDIV, PyTokenTypes.DIV, + PyTokenTypes.PERC, PyTokenTypes.EXP); TokenSet UNARY_OPS = TokenSet.create(PyTokenTypes.NOT_KEYWORD, PyTokenTypes.PLUS, PyTokenTypes.MINUS, PyTokenTypes.TILDE); diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index 07a627d8e15f..8755304365ba 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -160,6 +160,7 @@ return PyTokenTypes.DOCSTRING; } "-=" { return PyTokenTypes.MINUSEQ; } "**=" { return PyTokenTypes.EXPEQ; } "*=" { return PyTokenTypes.MULTEQ; } +"@=" { return PyTokenTypes.ATEQ; } "//=" { return PyTokenTypes.FLOORDIVEQ; } "/=" { return PyTokenTypes.DIVEQ; } "%=" { return PyTokenTypes.PERCEQ; } diff --git a/python/testData/psi/MatMul.py b/python/testData/psi/MatMul.py new file mode 100644 index 000000000000..4cd35008d8af --- /dev/null +++ b/python/testData/psi/MatMul.py @@ -0,0 +1,5 @@ +x @ y +x @ y @ z +x @ y * z +x + y @ z +z @= x diff --git a/python/testData/psi/MatMul.txt b/python/testData/psi/MatMul.txt new file mode 100644 index 000000000000..44ff4ee93774 --- /dev/null +++ b/python/testData/psi/MatMul.txt @@ -0,0 +1,67 @@ +PyFile:MatMul.py + PyExpressionStatement + PyBinaryExpression + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:AT)('@') + PsiWhiteSpace(' ') + PyReferenceExpression: y + PsiElement(Py:IDENTIFIER)('y') + PsiWhiteSpace('\n') + PyExpressionStatement + PyBinaryExpression + PyBinaryExpression + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:AT)('@') + PsiWhiteSpace(' ') + PyReferenceExpression: y + PsiElement(Py:IDENTIFIER)('y') + PsiWhiteSpace(' ') + PsiElement(Py:AT)('@') + PsiWhiteSpace(' ') + PyReferenceExpression: z + PsiElement(Py:IDENTIFIER)('z') + PsiWhiteSpace('\n') + PyExpressionStatement + PyBinaryExpression + PyBinaryExpression + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:AT)('@') + PsiWhiteSpace(' ') + PyReferenceExpression: y + PsiElement(Py:IDENTIFIER)('y') + PsiWhiteSpace(' ') + PsiElement(Py:MULT)('*') + PsiWhiteSpace(' ') + PyReferenceExpression: z + PsiElement(Py:IDENTIFIER)('z') + PsiWhiteSpace('\n') + PyExpressionStatement + PyBinaryExpression + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') + PsiWhiteSpace(' ') + PsiElement(Py:PLUS)('+') + PsiWhiteSpace(' ') + PyBinaryExpression + PyReferenceExpression: y + PsiElement(Py:IDENTIFIER)('y') + PsiWhiteSpace(' ') + PsiElement(Py:AT)('@') + PsiWhiteSpace(' ') + PyReferenceExpression: z + PsiElement(Py:IDENTIFIER)('z') + PsiWhiteSpace('\n') + PyAugAssignmentStatement + PyReferenceExpression: z + PsiElement(Py:IDENTIFIER)('z') + PsiWhiteSpace(' ') + PsiElement(Py:ATEQ)('@=') + PsiWhiteSpace(' ') + PyReferenceExpression: x + PsiElement(Py:IDENTIFIER)('x') \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index 9bdc65e52428..ecc415216428 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -468,6 +468,11 @@ public class PythonParsingTest extends ParsingTestCase { doTest(); } + // PY-15390 + public void testMatMul() { + doTest(LanguageLevel.PYTHON35); + } + public void doTest(LanguageLevel languageLevel) { LanguageLevel prev = myLanguageLevel; myLanguageLevel = languageLevel;