diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index b88fe41df9ac..b7cc3b99a9b4 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -90,7 +90,6 @@ TRIPLE_APOS_LITERAL = {THREE_APOS} {STRING_3CHAR_APOS}* {THREE_APOS} "elif" { return PyTokenTypes.ELIF_KEYWORD; } "else" { return PyTokenTypes.ELSE_KEYWORD; } "except" { return PyTokenTypes.EXCEPT_KEYWORD; } -"exec" { return PyTokenTypes.EXEC_KEYWORD; } "finally" { return PyTokenTypes.FINALLY_KEYWORD; } "for" { return PyTokenTypes.FOR_KEYWORD; } "from" { return PyTokenTypes.FROM_KEYWORD; } diff --git a/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java b/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java index 65836fa7e3ef..80e4eeec1ba3 100644 --- a/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java +++ b/python/src/com/jetbrains/python/lexer/PythonHighlightingLexer.java @@ -16,21 +16,22 @@ public class PythonHighlightingLexer extends PythonLexer { @Override public IElementType getTokenType() { + final String tokenText = getTokenText(); if (myLanguageLevel.hasWithStatement()) { - final String tokenText = getTokenText(); if (tokenText.equals("with")) return PyTokenTypes.WITH_KEYWORD; if (tokenText.equals("as")) return PyTokenTypes.AS_KEYWORD; } if (myLanguageLevel.hasPrintStatement()) { - final String tokenText = getTokenText(); if (tokenText.equals("print")) return PyTokenTypes.PRINT_KEYWORD; } if (myLanguageLevel.isPy3K()) { - final String tokenText = getTokenText(); if (tokenText.equals("None")) return PyTokenTypes.NONE_KEYWORD; if (tokenText.equals("True")) return PyTokenTypes.TRUE_KEYWORD; if (tokenText.equals("False")) return PyTokenTypes.FALSE_KEYWORD; } + else { + if (tokenText.equals("exec")) return PyTokenTypes.EXEC_KEYWORD; + } return super.getTokenType(); } } diff --git a/python/src/com/jetbrains/python/lexer/_PythonLexer.java b/python/src/com/jetbrains/python/lexer/_PythonLexer.java index 6860228b19a4..31acaade7b61 100644 --- a/python/src/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/src/com/jetbrains/python/lexer/_PythonLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.1 on 15.01.10 19:16 */ +/* The following code was generated by JFlex 1.4.3 on 22.01.10 14:12 */ /* It's an automatically generated code. Do not modify it. */ package com.jetbrains.python.lexer; @@ -10,8 +10,8 @@ import com.jetbrains.python.PyTokenTypes; /** * This class is a scanner generated by - * JFlex 1.4.1 - * on 15.01.10 19:16 from the specification file + * JFlex 1.4.3 + * on 22.01.10 14:12 from the specification file * C:/JetBrains/IDEA/tools/lexer/../../python/src/com/jetbrains/python/lexer/Python.flex */ class _PythonLexer implements FlexLexer { @@ -21,6 +21,16 @@ class _PythonLexer implements FlexLexer { /** lexical states */ public static final int YYINITIAL = 0; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0 + }; + /** * Translates characters to character classes */ @@ -56,14 +66,14 @@ class _PythonLexer implements FlexLexer { "\1\54\1\55\1\56\1\57\1\60\1\61\1\62\1\63"+ "\1\64\1\65\1\66\1\67\1\70\1\71\3\2\1\43"+ "\1\0\1\10\2\0\1\3\1\72\1\3\1\73\1\74"+ - "\1\75\6\3\1\76\6\3\1\77\4\3\1\100\1\101"+ - "\1\102\1\103\6\0\2\3\1\104\1\105\1\106\10\3"+ - "\1\107\1\110\3\3\4\0\3\3\1\111\1\3\1\112"+ - "\1\113\3\3\1\114\1\3\1\115\1\116\1\117\1\120"+ - "\1\121\1\3\1\122\1\3\1\123\1\3\1\124\1\125"; + "\1\75\5\3\1\76\6\3\1\77\4\3\1\100\1\101"+ + "\1\102\1\103\6\0\2\3\1\104\1\105\10\3\1\106"+ + "\1\107\3\3\4\0\3\3\1\110\1\3\1\111\1\112"+ + "\3\3\1\113\1\3\1\114\1\115\1\116\1\117\1\120"+ + "\1\3\1\121\1\3\1\122\1\3\1\123\1\124"; private static int [] zzUnpackAction() { - int [] result = new int[201]; + int [] result = new int[199]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -104,19 +114,18 @@ class _PythonLexer implements FlexLexer { "\0\106\0\106\0\106\0\106\0\u14c8\0\106\0\106\0\u150e"+ "\0\106\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\106\0\u16b2"+ "\0\u16f8\0\u173e\0\u0118\0\u1784\0\u0118\0\u0118\0\u0118\0\u17ca"+ - "\0\u1810\0\u1856\0\u189c\0\u18e2\0\u1928\0\u0118\0\u196e\0\u19b4"+ - "\0\u19fa\0\u1a40\0\u1a86\0\u1acc\0\u0118\0\u1b12\0\u1b58\0\u1b9e"+ - "\0\u1be4\0\106\0\106\0\106\0\106\0\u1c2a\0\u1c70\0\u1cb6"+ - "\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u1e14\0\u0118\0\u0118\0\u0118"+ - "\0\u1e5a\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u2044"+ - "\0\u0118\0\u0118\0\u208a\0\u20d0\0\u2116\0\u215c\0\u21a2\0\u21e8"+ - "\0\u222e\0\u2274\0\u22ba\0\u2300\0\u0118\0\u2346\0\u0118\0\u0118"+ - "\0\u238c\0\u23d2\0\u2418\0\u0118\0\u245e\0\u0118\0\u0118\0\u0118"+ - "\0\u0118\0\u0118\0\u24a4\0\u0118\0\u24ea\0\u0118\0\u2530\0\u0118"+ - "\0\u0118"; + "\0\u1810\0\u1856\0\u189c\0\u18e2\0\u0118\0\u1928\0\u196e\0\u19b4"+ + "\0\u19fa\0\u1a40\0\u1a86\0\u0118\0\u1acc\0\u1b12\0\u1b58\0\u1b9e"+ + "\0\106\0\106\0\106\0\106\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6"+ + "\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u0118\0\u0118\0\u1e14\0\u1e5a"+ + "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u0118\0\u0118"+ + "\0\u2044\0\u208a\0\u20d0\0\u2116\0\u215c\0\u21a2\0\u21e8\0\u222e"+ + "\0\u2274\0\u22ba\0\u0118\0\u2300\0\u0118\0\u0118\0\u2346\0\u238c"+ + "\0\u23d2\0\u0118\0\u2418\0\u0118\0\u0118\0\u0118\0\u0118\0\u0118"+ + "\0\u245e\0\u0118\0\u24a4\0\u0118\0\u24ea\0\u0118\0\u0118"; private static int [] zzUnpackRowMap() { - int [] result = new int[201]; + int [] result = new int[199]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -218,121 +227,119 @@ class _PythonLexer implements FlexLexer { "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ "\3\0\1\200\3\0\3\5\1\201\21\5\30\0\11\5"+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\4\5\1\202\4\5\1\203\13\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\204"+ - "\3\0\25\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\6\5\1\205\16\5"+ + "\3\0\11\5\1\202\13\5\30\0\11\5\2\0\1\5"+ + "\1\0\1\5\1\0\3\5\3\0\1\203\3\0\25\5"+ "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\20\5\1\206\4\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\1\14\1\0"+ - "\1\16\1\5\3\0\4\5\1\207\20\5\30\0\11\5"+ + "\3\0\1\5\3\0\6\5\1\204\16\5\30\0\11\5"+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\1\210\24\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\1\5\1\211"+ - "\23\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\21\5\1\212\3\5\30\0"+ + "\3\0\20\5\1\205\4\5\30\0\11\5\2\0\1\5"+ + "\1\0\1\5\1\0\3\5\1\14\1\0\1\16\1\5"+ + "\3\0\4\5\1\206\20\5\30\0\11\5\2\0\1\5"+ + "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\1\207"+ + "\24\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\5\3\0\1\5\1\210\23\5\30\0"+ "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\1\5\1\213\23\5\30\0\11\5\2\0"+ + "\1\5\3\0\21\5\1\211\3\5\30\0\11\5\2\0"+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\13\5\1\214\11\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\5\5\1\215"+ - "\17\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\3\5\1\216\21\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\4\5\1\217\20\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\13\5\1\220\11\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\221\3\0\25\5\107\0"+ - "\1\222\105\0\1\223\105\0\1\224\105\0\1\225\26\0"+ - "\5\162\2\0\1\162\1\76\4\0\1\162\13\0\1\162"+ - "\1\0\1\162\1\0\1\162\2\0\1\162\1\0\1\162"+ - "\1\76\2\0\1\162\37\0\1\163\1\0\1\163\1\0"+ - "\1\163\3\0\1\76\32\0\1\76\42\0\1\164\3\0"+ - "\1\164\3\0\1\76\32\0\1\76\42\0\3\165\1\0"+ - "\1\165\12\0\1\101\66\0\3\165\1\0\1\165\100\0"+ - "\23\170\1\226\1\227\1\170\1\230\57\170\24\171\1\231"+ - "\1\232\1\233\57\171\1\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\13\5\1\234"+ + "\1\5\1\212\23\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\13\5\1\213"+ "\11\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\4\5\1\235\20\5\30\0"+ + "\3\5\3\0\1\5\3\0\5\5\1\214\17\5\30\0"+ "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\15\5\1\236\7\5\30\0\11\5\2\0"+ + "\1\5\3\0\3\5\1\215\21\5\30\0\11\5\2\0"+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\4\5\1\237\20\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\11\5\1\240"+ - "\13\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\4\5\1\241\20\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\3\5\1\242\21\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\14\5\1\243\10\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\1\244\24\5"+ - "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\3\5\1\245\21\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\6\5\1\246\16\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\7\5"+ - "\1\247\15\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\1\250\24\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\21\5\1\251\3\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\3\5\1\252\21\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\253"+ - "\12\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\7\5\1\254\15\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\12\5\1\255\12\5\27\0\23\170\1\256"+ - "\1\227\1\170\1\257\210\170\1\257\1\227\1\170\1\257"+ - "\57\170\132\171\1\231\1\260\1\261\103\171\1\231\2\261"+ + "\4\5\1\216\20\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\13\5\1\217"+ + "\11\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\220\3\0\25\5\107\0\1\221\105\0"+ + "\1\222\105\0\1\223\105\0\1\224\26\0\5\162\2\0"+ + "\1\162\1\76\4\0\1\162\13\0\1\162\1\0\1\162"+ + "\1\0\1\162\2\0\1\162\1\0\1\162\1\76\2\0"+ + "\1\162\37\0\1\163\1\0\1\163\1\0\1\163\3\0"+ + "\1\76\32\0\1\76\42\0\1\164\3\0\1\164\3\0"+ + "\1\76\32\0\1\76\42\0\3\165\1\0\1\165\12\0"+ + "\1\101\66\0\3\165\1\0\1\165\100\0\23\170\1\225"+ + "\1\226\1\170\1\227\57\170\24\171\1\230\1\231\1\232"+ "\57\171\1\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\5\5\1\262\17\5\30\0"+ + "\3\5\3\0\1\5\3\0\13\5\1\233\11\5\30\0"+ "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\5\5\1\263\17\5\30\0\11\5\2\0"+ + "\1\5\3\0\4\5\1\234\20\5\30\0\11\5\2\0"+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\17\5\1\264\5\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\265"+ + "\15\5\1\235\7\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\236"+ "\20\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\5\5\1\266\17\5\30\0"+ + "\3\5\3\0\1\5\3\0\4\5\1\237\20\5\30\0"+ "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\10\5\1\267\14\5\30\0\11\5\2\0"+ + "\1\5\3\0\3\5\1\240\21\5\30\0\11\5\2\0"+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\3\5\1\270\21\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\271\3\0\25\5\30\0"+ - "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\2\5\1\272\22\5\30\0\11\5\2\0"+ - "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\12\5\1\273\12\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\2\5\1\274"+ - "\22\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\1\275\24\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\4\5\1\276\20\5\27\0\23\170\1\167\1\227"+ - "\1\170\1\0\102\170\1\0\1\227\1\170\1\0\57\170"+ - "\24\171\1\231\1\167\1\0\103\171\1\231\2\0\57\171"+ - "\1\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\6\5\1\277\16\5\30\0\11\5"+ - "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\6\5\1\300\16\5\30\0\11\5\2\0\1\5"+ - "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\6\5"+ - "\1\301\16\5\30\0\11\5\2\0\1\5\1\0\1\5"+ - "\1\0\3\5\3\0\1\5\3\0\1\5\1\302\23\5"+ + "\14\5\1\241\10\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\1\242\24\5"+ "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ - "\3\0\1\5\3\0\1\5\1\303\23\5\30\0\11\5"+ + "\3\0\1\5\3\0\3\5\1\243\21\5\30\0\11\5"+ "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ - "\3\0\1\304\24\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\305"+ - "\12\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ - "\3\5\3\0\1\5\3\0\12\5\1\306\12\5\30\0"+ + "\3\0\6\5\1\244\16\5\30\0\11\5\2\0\1\5"+ + "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\7\5"+ + "\1\245\15\5\30\0\11\5\2\0\1\5\1\0\1\5"+ + "\1\0\3\5\3\0\1\5\3\0\1\246\24\5\30\0"+ "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ - "\1\5\3\0\14\5\1\307\10\5\30\0\11\5\2\0"+ + "\1\5\3\0\21\5\1\247\3\5\30\0\11\5\2\0"+ "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ - "\20\5\1\310\4\5\30\0\11\5\2\0\1\5\1\0"+ - "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\311"+ + "\3\5\1\250\21\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\251"+ + "\12\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\5\3\0\7\5\1\252\15\5\30\0"+ + "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ + "\1\5\3\0\12\5\1\253\12\5\27\0\23\170\1\254"+ + "\1\226\1\170\1\255\210\170\1\255\1\226\1\170\1\255"+ + "\57\170\132\171\1\230\1\256\1\257\103\171\1\230\2\257"+ + "\57\171\1\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\5\3\0\5\5\1\260\17\5\30\0"+ + "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ + "\1\5\3\0\5\5\1\261\17\5\30\0\11\5\2\0"+ + "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ + "\17\5\1\262\5\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\263"+ + "\20\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\5\3\0\5\5\1\264\17\5\30\0"+ + "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ + "\1\5\3\0\10\5\1\265\14\5\30\0\11\5\2\0"+ + "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ + "\3\5\1\266\21\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\267\3\0\25\5\30\0"+ + "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ + "\1\5\3\0\2\5\1\270\22\5\30\0\11\5\2\0"+ + "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ + "\12\5\1\271\12\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\2\5\1\272"+ + "\22\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\5\3\0\1\273\24\5\30\0\11\5"+ + "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ + "\3\0\4\5\1\274\20\5\27\0\23\170\1\167\1\226"+ + "\1\170\1\0\102\170\1\0\1\226\1\170\1\0\57\170"+ + "\24\171\1\230\1\167\1\0\103\171\1\230\2\0\57\171"+ + "\1\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ + "\3\0\1\5\3\0\6\5\1\275\16\5\30\0\11\5"+ + "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ + "\3\0\6\5\1\276\16\5\30\0\11\5\2\0\1\5"+ + "\1\0\1\5\1\0\3\5\3\0\1\5\3\0\6\5"+ + "\1\277\16\5\30\0\11\5\2\0\1\5\1\0\1\5"+ + "\1\0\3\5\3\0\1\5\3\0\1\5\1\300\23\5"+ + "\30\0\11\5\2\0\1\5\1\0\1\5\1\0\3\5"+ + "\3\0\1\5\3\0\1\5\1\301\23\5\30\0\11\5"+ + "\2\0\1\5\1\0\1\5\1\0\3\5\3\0\1\5"+ + "\3\0\1\302\24\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\12\5\1\303"+ + "\12\5\30\0\11\5\2\0\1\5\1\0\1\5\1\0"+ + "\3\5\3\0\1\5\3\0\12\5\1\304\12\5\30\0"+ + "\11\5\2\0\1\5\1\0\1\5\1\0\3\5\3\0"+ + "\1\5\3\0\14\5\1\305\10\5\30\0\11\5\2\0"+ + "\1\5\1\0\1\5\1\0\3\5\3\0\1\5\3\0"+ + "\20\5\1\306\4\5\30\0\11\5\2\0\1\5\1\0"+ + "\1\5\1\0\3\5\3\0\1\5\3\0\4\5\1\307"+ "\20\5\27\0"; private static int [] zzUnpackTrans() { - int [] result = new int[9590]; + int [] result = new int[9520]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -376,11 +383,11 @@ class _PythonLexer implements FlexLexer { "\1\0\1\11\12\1\1\11\2\1\3\11\32\1\14\11"+ "\1\1\4\0\1\11\1\1\1\0\2\11\37\1\3\11"+ "\1\1\1\11\1\1\5\11\1\1\2\11\1\1\1\11"+ - "\4\1\1\0\1\11\2\0\30\1\4\11\6\0\22\1"+ + "\4\1\1\0\1\11\2\0\27\1\4\11\6\0\21\1"+ "\4\0\30\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[201]; + int [] result = new int[199]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -649,7 +656,7 @@ class _PythonLexer implements FlexLexer { zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - zzState = zzLexicalState; + zzState = ZZ_LEXSTATE[zzLexicalState]; zzForAction: { @@ -697,346 +704,342 @@ class _PythonLexer implements FlexLexer { zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 76: + case 75: { return PyTokenTypes.YIELD_KEYWORD; } - case 86: break; + case 85: break; case 2: { return PyTokenTypes.INTEGER_LITERAL; } - case 87: break; + case 86: break; case 16: { return PyTokenTypes.DIV; } - case 88: break; + case 87: break; case 17: { return PyTokenTypes.PERC; } - case 89: break; + case 88: break; case 9: { return PyTokenTypes.BACKSLASH; } - case 90: break; + case 89: break; case 25: { return PyTokenTypes.RPAR; } - case 91: break; + case 90: break; case 1: { return PyTokenTypes.BAD_CHARACTER; } - case 92: break; + case 91: break; case 28: { return PyTokenTypes.LBRACE; } - case 93: break; + case 92: break; case 7: { return PyTokenTypes.MINUS; } - case 94: break; - case 74: + case 93: break; + case 73: { return PyTokenTypes.BREAK_KEYWORD; } - case 95: break; + case 94: break; case 27: { return PyTokenTypes.RBRACKET; } - case 96: break; + case 95: break; case 6: { return PyTokenTypes.DOT; } - case 97: break; + case 96: break; case 3: { return PyTokenTypes.IDENTIFIER; } - case 98: break; + case 97: break; case 24: { return PyTokenTypes.LPAR; } - case 99: break; + case 98: break; case 22: { return PyTokenTypes.LT; } - case 100: break; + case 99: break; case 38: { return PyTokenTypes.IN_KEYWORD; } - case 101: break; - case 73: + case 100: break; + case 72: { return PyTokenTypes.RAISE_KEYWORD; } - case 102: break; + case 101: break; case 8: { return PyTokenTypes.STRING_LITERAL; } - case 103: break; + case 102: break; case 66: { return PyTokenTypes.GTGTEQ; } - case 104: break; + case 103: break; case 10: { return PyTokenTypes.SPACE; } - case 105: break; - case 80: + case 104: break; + case 79: { return PyTokenTypes.EXCEPT_KEYWORD; } - case 106: break; + case 105: break; case 36: { return PyTokenTypes.IMAGINARY_LITERAL; } - case 107: break; + case 106: break; case 12: { return PyTokenTypes.FORMFEED; } - case 108: break; + case 107: break; case 34: { return PyTokenTypes.SEMICOLON; } - case 109: break; + case 108: break; case 21: { return PyTokenTypes.GT; } - case 110: break; + case 109: break; case 26: { return PyTokenTypes.LBRACKET; } - case 111: break; + case 110: break; case 32: { return PyTokenTypes.COLON; } - case 112: break; + case 111: break; case 67: { return PyTokenTypes.LTLTEQ; } - case 113: break; + case 112: break; case 19: { return PyTokenTypes.OR; } - case 114: break; + case 113: break; case 69: { return PyTokenTypes.ELSE_KEYWORD; } - case 115: break; + case 114: break; case 44: { return PyTokenTypes.MULTEQ; } - case 116: break; - case 84: + case 115: break; + case 83: { return PyTokenTypes.FINALLY_KEYWORD; } - case 117: break; - case 77: + case 116: break; + case 76: { return PyTokenTypes.WHILE_KEYWORD; } - case 118: break; + case 117: break; case 15: { return PyTokenTypes.MULT; } - case 119: break; - case 79: + case 118: break; + case 78: { return PyTokenTypes.ASSERT_KEYWORD; } - case 120: break; + case 119: break; case 47: { return PyTokenTypes.FLOORDIV; } - case 121: break; - case 83: + case 120: break; + case 82: { return PyTokenTypes.GLOBAL_KEYWORD; } - case 122: break; - case 82: + case 121: break; + case 81: { return PyTokenTypes.LAMBDA_KEYWORD; } - case 123: break; + case 122: break; case 51: { return PyTokenTypes.XOREQ; } - case 124: break; + case 123: break; case 63: { return PyTokenTypes.FOR_KEYWORD; } - case 125: break; + case 124: break; case 30: { return PyTokenTypes.AT; } - case 126: break; + case 125: break; case 59: { return PyTokenTypes.NOT_KEYWORD; } - case 127: break; + case 126: break; case 13: { return PyTokenTypes.PLUS; } - case 128: break; + case 127: break; case 37: { return PyTokenTypes.MINUSEQ; } - case 129: break; + case 128: break; case 57: { return PyTokenTypes.NE; } - case 130: break; + case 129: break; case 31: { return PyTokenTypes.COMMA; } - case 131: break; + case 130: break; case 43: { return PyTokenTypes.EQEQ; } - case 132: break; + case 131: break; case 33: { return PyTokenTypes.TICK; } - case 133: break; + case 132: break; case 45: { return PyTokenTypes.EXP; } - case 134: break; - case 85: + case 133: break; + case 84: { return PyTokenTypes.CONTINUE_KEYWORD; } - case 135: break; + case 134: break; case 56: { return PyTokenTypes.LTLT; } - case 136: break; + case 135: break; case 54: { return PyTokenTypes.LE; } - case 137: break; + case 136: break; case 58: { return PyTokenTypes.AND_KEYWORD; } - case 138: break; + case 137: break; case 41: { return PyTokenTypes.OR_KEYWORD; } - case 139: break; - case 70: - { return PyTokenTypes.EXEC_KEYWORD; - } - case 140: break; - case 72: + case 138: break; + case 71: { return PyTokenTypes.PASS_KEYWORD; } - case 141: break; + case 139: break; case 4: { return PyTokenTypes.END_OF_LINE_COMMENT; } - case 142: break; + case 140: break; case 50: { return PyTokenTypes.OREQ; } - case 143: break; + case 141: break; case 53: { return PyTokenTypes.GTGT; } - case 144: break; + case 142: break; case 18: { return PyTokenTypes.AND; } - case 145: break; + case 143: break; case 46: { return PyTokenTypes.DIVEQ; } - case 146: break; - case 81: + case 144: break; + case 80: { return PyTokenTypes.RETURN_KEYWORD; } - case 147: break; - case 78: + case 145: break; + case 77: { return PyTokenTypes.IMPORT_KEYWORD; } - case 148: break; + case 146: break; case 52: { return PyTokenTypes.GE; } - case 149: break; + case 147: break; case 42: { return PyTokenTypes.PLUSEQ; } - case 150: break; + case 148: break; case 61: { return PyTokenTypes.DEF_KEYWORD; } - case 151: break; + case 149: break; case 39: { return PyTokenTypes.IS_KEYWORD; } - case 152: break; + case 150: break; case 35: { return PyTokenTypes.FLOAT_LITERAL; } - case 153: break; + case 151: break; case 65: { return PyTokenTypes.FLOORDIVEQ; } - case 154: break; + case 152: break; case 5: { return PyTokenTypes.LINE_BREAK; } - case 155: break; + case 153: break; case 48: { return PyTokenTypes.PERCEQ; } - case 156: break; + case 154: break; case 62: { return PyTokenTypes.TRY_KEYWORD; } - case 157: break; + case 155: break; case 49: { return PyTokenTypes.ANDEQ; } - case 158: break; + case 156: break; case 14: { return PyTokenTypes.EQ; } - case 159: break; - case 71: + case 157: break; + case 70: { return PyTokenTypes.FROM_KEYWORD; } - case 160: break; + case 158: break; case 64: { return PyTokenTypes.EXPEQ; } - case 161: break; + case 159: break; case 68: { return PyTokenTypes.ELIF_KEYWORD; } - case 162: break; + case 160: break; case 29: { return PyTokenTypes.RBRACE; } - case 163: break; - case 75: + case 161: break; + case 74: { return PyTokenTypes.CLASS_KEYWORD; } - case 164: break; + case 162: break; case 40: { return PyTokenTypes.IF_KEYWORD; } - case 165: break; + case 163: break; case 11: { return PyTokenTypes.TAB; } - case 166: break; + case 164: break; case 55: { return PyTokenTypes.NE_OLD; } - case 167: break; + case 165: break; case 23: { return PyTokenTypes.TILDE; } - case 168: break; + case 166: break; case 20: { return PyTokenTypes.XOR; } - case 169: break; + case 167: break; case 60: { return PyTokenTypes.DEL_KEYWORD; } - case 170: break; + case 168: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/python/src/com/jetbrains/python/parsing/StatementParsing.java b/python/src/com/jetbrains/python/parsing/StatementParsing.java index 55657216ed3f..2de5ee1c7cef 100644 --- a/python/src/com/jetbrains/python/parsing/StatementParsing.java +++ b/python/src/com/jetbrains/python/parsing/StatementParsing.java @@ -29,6 +29,7 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper { @NonNls protected static final String TOK_NONE = "None"; @NonNls protected static final String TOK_TRUE = "True"; @NonNls protected static final String TOK_FALSE = "False"; + @NonNls protected static final String TOK_EXEC = "exec"; protected enum Phase {NONE, FROM, FUTURE, IMPORT} // 'from __future__ import' phase private Phase myFutureImportPhase = Phase.NONE; @@ -759,6 +760,11 @@ public class StatementParsing extends Parsing implements ITokenTypeRemapper { return PyTokenTypes.FALSE_KEYWORD; } } + else if (!myContext.getLanguageLevel().isPy3K() && source == PyTokenTypes.IDENTIFIER) { + if (isWordAtPosition(text, start, end, TOK_EXEC)) { + return PyTokenTypes.EXEC_KEYWORD; + } + } return source; } diff --git a/python/testData/psi/ExecPy2.py b/python/testData/psi/ExecPy2.py new file mode 100644 index 000000000000..60149606a182 --- /dev/null +++ b/python/testData/psi/ExecPy2.py @@ -0,0 +1 @@ +exec 'print 1' in {}, {} diff --git a/python/testData/psi/ExecPy2.txt b/python/testData/psi/ExecPy2.txt new file mode 100644 index 000000000000..3c62fd4119b1 --- /dev/null +++ b/python/testData/psi/ExecPy2.txt @@ -0,0 +1,17 @@ +PyFile:ExecPy2.py + PyExecStatement + PsiElement(Py:EXEC_KEYWORD)('exec') + PsiWhiteSpace(' ') + PyStringLiteralExpression: print 1 + PsiElement(Py:STRING_LITERAL)(''print 1'') + PsiWhiteSpace(' ') + PsiElement(Py:IN_KEYWORD)('in') + PsiWhiteSpace(' ') + PyDictLiteralExpression + PsiElement(Py:LBRACE)('{') + PsiElement(Py:RBRACE)('}') + PsiElement(Py:COMMA)(',') + PsiWhiteSpace(' ') + PyDictLiteralExpression + PsiElement(Py:LBRACE)('{') + PsiElement(Py:RBRACE)('}') diff --git a/python/testData/psi/ExecPy3.py b/python/testData/psi/ExecPy3.py new file mode 100644 index 000000000000..dfdc65972e54 --- /dev/null +++ b/python/testData/psi/ExecPy3.py @@ -0,0 +1 @@ +def exec(): pass diff --git a/python/testData/psi/ExecPy3.txt b/python/testData/psi/ExecPy3.txt new file mode 100644 index 000000000000..43dcd4ad29d8 --- /dev/null +++ b/python/testData/psi/ExecPy3.txt @@ -0,0 +1,13 @@ +PyFile:ExecPy3.py + PyFunction('exec') + PsiElement(Py:DEF_KEYWORD)('def') + PsiWhiteSpace(' ') + PsiElement(Py:IDENTIFIER)('exec') + PyParameterList + PsiElement(Py:LPAR)('(') + PsiElement(Py:RPAR)(')') + PsiElement(Py:COLON)(':') + PsiWhiteSpace(' ') + PyStatementList + PyPassStatement + PsiElement(Py:PASS_KEYWORD)('pass') \ 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 8cee56ce44c7..de2a6ed39ef2 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -126,6 +126,14 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON30); } + public void testExecPy2() throws Exception { + doTest(); + } + + public void testExecPy3() throws Exception { + doTest(LanguageLevel.PYTHON30); + } + public void doTest() throws Exception { doTest(LanguageLevel.PYTHON25); }