Index: third_party/cython/src/Cython/Compiler/Lexicon.py |
diff --git a/third_party/cython/src/Cython/Compiler/Lexicon.py b/third_party/cython/src/Cython/Compiler/Lexicon.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..51fd9ccf252920bdc00311bd71c3a99bc200e6c9 |
--- /dev/null |
+++ b/third_party/cython/src/Cython/Compiler/Lexicon.py |
@@ -0,0 +1,134 @@ |
+# cython: language_level=3, py2_import=True |
+# |
+# Cython Scanner - Lexical Definitions |
+# |
+ |
+raw_prefixes = "rR" |
+bytes_prefixes = "bB" |
+string_prefixes = "uU" + bytes_prefixes |
+char_prefixes = "cC" |
+any_string_prefix = raw_prefixes + string_prefixes + char_prefixes |
+IDENT = 'IDENT' |
+ |
+def make_lexicon(): |
+ from Cython.Plex import \ |
+ Str, Any, AnyBut, AnyChar, Rep, Rep1, Opt, Bol, Eol, Eof, \ |
+ TEXT, IGNORE, State, Lexicon |
+ from Scanning import Method |
+ |
+ letter = Any("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_") |
+ digit = Any("0123456789") |
+ bindigit = Any("01") |
+ octdigit = Any("01234567") |
+ hexdigit = Any("0123456789ABCDEFabcdef") |
+ indentation = Bol + Rep(Any(" \t")) |
+ |
+ decimal = Rep1(digit) |
+ dot = Str(".") |
+ exponent = Any("Ee") + Opt(Any("+-")) + decimal |
+ decimal_fract = (decimal + dot + Opt(decimal)) | (dot + decimal) |
+ |
+ name = letter + Rep(letter | digit) |
+ intconst = decimal | (Str("0") + ((Any("Xx") + Rep1(hexdigit)) | |
+ (Any("Oo") + Rep1(octdigit)) | |
+ (Any("Bb") + Rep1(bindigit)) )) |
+ intsuffix = (Opt(Any("Uu")) + Opt(Any("Ll")) + Opt(Any("Ll"))) | (Opt(Any("Ll")) + Opt(Any("Ll")) + Opt(Any("Uu"))) |
+ intliteral = intconst + intsuffix |
+ fltconst = (decimal_fract + Opt(exponent)) | (decimal + exponent) |
+ imagconst = (intconst | fltconst) + Any("jJ") |
+ |
+ beginstring = Opt(Any(string_prefixes) + Opt(Any(raw_prefixes)) | |
+ Any(raw_prefixes) + Opt(Any(bytes_prefixes)) | |
+ Any(char_prefixes) |
+ ) + (Str("'") | Str('"') | Str("'''") | Str('"""')) |
+ two_oct = octdigit + octdigit |
+ three_oct = octdigit + octdigit + octdigit |
+ two_hex = hexdigit + hexdigit |
+ four_hex = two_hex + two_hex |
+ escapeseq = Str("\\") + (two_oct | three_oct | |
+ Str('N{') + Rep(AnyBut('}')) + Str('}') | |
+ Str('u') + four_hex | Str('x') + two_hex | |
+ Str('U') + four_hex + four_hex | AnyChar) |
+ |
+ deco = Str("@") |
+ bra = Any("([{") |
+ ket = Any(")]}") |
+ punct = Any(":,;+-*/|&<>=.%`~^?!") |
+ diphthong = Str("==", "<>", "!=", "<=", ">=", "<<", ">>", "**", "//", |
+ "+=", "-=", "*=", "/=", "%=", "|=", "^=", "&=", |
+ "<<=", ">>=", "**=", "//=", "->") |
+ spaces = Rep1(Any(" \t\f")) |
+ escaped_newline = Str("\\\n") |
+ lineterm = Eol + Opt(Str("\n")) |
+ |
+ comment = Str("#") + Rep(AnyBut("\n")) |
+ |
+ return Lexicon([ |
+ (name, IDENT), |
+ (intliteral, 'INT'), |
+ (fltconst, 'FLOAT'), |
+ (imagconst, 'IMAG'), |
+ (deco, 'DECORATOR'), |
+ (punct | diphthong, TEXT), |
+ |
+ (bra, Method('open_bracket_action')), |
+ (ket, Method('close_bracket_action')), |
+ (lineterm, Method('newline_action')), |
+ |
+ (beginstring, Method('begin_string_action')), |
+ |
+ (comment, IGNORE), |
+ (spaces, IGNORE), |
+ (escaped_newline, IGNORE), |
+ |
+ State('INDENT', [ |
+ (comment + lineterm, Method('commentline')), |
+ (Opt(spaces) + Opt(comment) + lineterm, IGNORE), |
+ (indentation, Method('indentation_action')), |
+ (Eof, Method('eof_action')) |
+ ]), |
+ |
+ State('SQ_STRING', [ |
+ (escapeseq, 'ESCAPE'), |
+ (Rep1(AnyBut("'\"\n\\")), 'CHARS'), |
+ (Str('"'), 'CHARS'), |
+ (Str("\n"), Method('unclosed_string_action')), |
+ (Str("'"), Method('end_string_action')), |
+ (Eof, 'EOF') |
+ ]), |
+ |
+ State('DQ_STRING', [ |
+ (escapeseq, 'ESCAPE'), |
+ (Rep1(AnyBut('"\n\\')), 'CHARS'), |
+ (Str("'"), 'CHARS'), |
+ (Str("\n"), Method('unclosed_string_action')), |
+ (Str('"'), Method('end_string_action')), |
+ (Eof, 'EOF') |
+ ]), |
+ |
+ State('TSQ_STRING', [ |
+ (escapeseq, 'ESCAPE'), |
+ (Rep1(AnyBut("'\"\n\\")), 'CHARS'), |
+ (Any("'\""), 'CHARS'), |
+ (Str("\n"), 'NEWLINE'), |
+ (Str("'''"), Method('end_string_action')), |
+ (Eof, 'EOF') |
+ ]), |
+ |
+ State('TDQ_STRING', [ |
+ (escapeseq, 'ESCAPE'), |
+ (Rep1(AnyBut('"\'\n\\')), 'CHARS'), |
+ (Any("'\""), 'CHARS'), |
+ (Str("\n"), 'NEWLINE'), |
+ (Str('"""'), Method('end_string_action')), |
+ (Eof, 'EOF') |
+ ]), |
+ |
+ (Eof, Method('eof_action')) |
+ ], |
+ |
+ # FIXME: Plex 1.9 needs different args here from Plex 1.1.4 |
+ #debug_flags = scanner_debug_flags, |
+ #debug_file = scanner_dump_file |
+ ) |
+ |