mirror of
https://github.com/python/cpython.git
synced 2026-10-28 10:25:05 +08:00
* gh-151464: exclude '<>' token from tokenize output Was: ``` $ echo '1 <> 2' | python -m tokenize 1,0-1,1: NUMBER '1' 1,2-1,4: OP '<>' 1,5-1,6: NUMBER '2' 1,6-1,7: NEWLINE '\n' 2,0-2,0: ENDMARKER '' ``` Now (regardless on ``__future__.barry_as_FLUFL`` import): ``` $ echo '1 <> 2' | ./python -m tokenize 1,0-1,1: NUMBER '1' 1,2-1,3: OP '<' 1,3-1,4: OP '>' 1,5-1,6: NUMBER '2' 1,6-1,7: NEWLINE '\n' 2,0-2,0: ENDMARKER '' ``` in accordance with the Grammar: https://docs.python.org/3.14/reference/lexical_analysis.html#operators-and-delimiters Also adds a custom error message for ``<>`` ("not equal" in Pascal and Python 2). * +1 * address review: lowercase and move invalid rule * address review: news * address review: move test_guido_as_bdfl_ineq_tokens() * address review: revert _PyTokenizer_From* changes * + revert unrelated change * address review: remove whatsnew entry
251 lines
4.7 KiB
C
Generated
251 lines
4.7 KiB
C
Generated
/* Auto-generated by Tools/build/generate_token.py */
|
|
|
|
#include "Python.h"
|
|
#include "pycore_token.h"
|
|
|
|
/* Token names */
|
|
|
|
const char * const _PyParser_TokenNames[] = {
|
|
"ENDMARKER",
|
|
"NAME",
|
|
"NUMBER",
|
|
"STRING",
|
|
"NEWLINE",
|
|
"INDENT",
|
|
"DEDENT",
|
|
"LPAR",
|
|
"RPAR",
|
|
"LSQB",
|
|
"RSQB",
|
|
"COLON",
|
|
"COMMA",
|
|
"SEMI",
|
|
"PLUS",
|
|
"MINUS",
|
|
"STAR",
|
|
"SLASH",
|
|
"VBAR",
|
|
"AMPER",
|
|
"LESS",
|
|
"GREATER",
|
|
"EQUAL",
|
|
"DOT",
|
|
"PERCENT",
|
|
"LBRACE",
|
|
"RBRACE",
|
|
"EQEQUAL",
|
|
"NOTEQUAL",
|
|
"LESSEQUAL",
|
|
"GREATEREQUAL",
|
|
"TILDE",
|
|
"CIRCUMFLEX",
|
|
"LEFTSHIFT",
|
|
"RIGHTSHIFT",
|
|
"DOUBLESTAR",
|
|
"PLUSEQUAL",
|
|
"MINEQUAL",
|
|
"STAREQUAL",
|
|
"SLASHEQUAL",
|
|
"PERCENTEQUAL",
|
|
"AMPEREQUAL",
|
|
"VBAREQUAL",
|
|
"CIRCUMFLEXEQUAL",
|
|
"LEFTSHIFTEQUAL",
|
|
"RIGHTSHIFTEQUAL",
|
|
"DOUBLESTAREQUAL",
|
|
"DOUBLESLASH",
|
|
"DOUBLESLASHEQUAL",
|
|
"AT",
|
|
"ATEQUAL",
|
|
"RARROW",
|
|
"ELLIPSIS",
|
|
"COLONEQUAL",
|
|
"EXCLAMATION",
|
|
"OP",
|
|
"TYPE_IGNORE",
|
|
"TYPE_COMMENT",
|
|
"SOFT_KEYWORD",
|
|
"FSTRING_START",
|
|
"FSTRING_MIDDLE",
|
|
"FSTRING_END",
|
|
"TSTRING_START",
|
|
"TSTRING_MIDDLE",
|
|
"TSTRING_END",
|
|
"COMMENT",
|
|
"NL",
|
|
"<ERRORTOKEN>",
|
|
"<ENCODING>",
|
|
"<N_TOKENS>",
|
|
};
|
|
|
|
/* Return the token corresponding to a single character */
|
|
|
|
int
|
|
_PyToken_OneChar(int c1)
|
|
{
|
|
switch (c1) {
|
|
case '!': return EXCLAMATION;
|
|
case '%': return PERCENT;
|
|
case '&': return AMPER;
|
|
case '(': return LPAR;
|
|
case ')': return RPAR;
|
|
case '*': return STAR;
|
|
case '+': return PLUS;
|
|
case ',': return COMMA;
|
|
case '-': return MINUS;
|
|
case '.': return DOT;
|
|
case '/': return SLASH;
|
|
case ':': return COLON;
|
|
case ';': return SEMI;
|
|
case '<': return LESS;
|
|
case '=': return EQUAL;
|
|
case '>': return GREATER;
|
|
case '@': return AT;
|
|
case '[': return LSQB;
|
|
case ']': return RSQB;
|
|
case '^': return CIRCUMFLEX;
|
|
case '{': return LBRACE;
|
|
case '|': return VBAR;
|
|
case '}': return RBRACE;
|
|
case '~': return TILDE;
|
|
}
|
|
return OP;
|
|
}
|
|
|
|
int
|
|
_PyToken_TwoChars(int c1, int c2, int BARRY_AS_BDFL)
|
|
{
|
|
switch (c1) {
|
|
case '!':
|
|
switch (c2) {
|
|
case '=': return NOTEQUAL;
|
|
}
|
|
break;
|
|
case '%':
|
|
switch (c2) {
|
|
case '=': return PERCENTEQUAL;
|
|
}
|
|
break;
|
|
case '&':
|
|
switch (c2) {
|
|
case '=': return AMPEREQUAL;
|
|
}
|
|
break;
|
|
case '*':
|
|
switch (c2) {
|
|
case '*': return DOUBLESTAR;
|
|
case '=': return STAREQUAL;
|
|
}
|
|
break;
|
|
case '+':
|
|
switch (c2) {
|
|
case '=': return PLUSEQUAL;
|
|
}
|
|
break;
|
|
case '-':
|
|
switch (c2) {
|
|
case '=': return MINEQUAL;
|
|
case '>': return RARROW;
|
|
}
|
|
break;
|
|
case '/':
|
|
switch (c2) {
|
|
case '/': return DOUBLESLASH;
|
|
case '=': return SLASHEQUAL;
|
|
}
|
|
break;
|
|
case ':':
|
|
switch (c2) {
|
|
case '=': return COLONEQUAL;
|
|
}
|
|
break;
|
|
case '<':
|
|
switch (c2) {
|
|
case '<': return LEFTSHIFT;
|
|
case '=': return LESSEQUAL;
|
|
case '>': return BARRY_AS_BDFL ? NOTEQUAL : OP;
|
|
}
|
|
break;
|
|
case '=':
|
|
switch (c2) {
|
|
case '=': return EQEQUAL;
|
|
}
|
|
break;
|
|
case '>':
|
|
switch (c2) {
|
|
case '=': return GREATEREQUAL;
|
|
case '>': return RIGHTSHIFT;
|
|
}
|
|
break;
|
|
case '@':
|
|
switch (c2) {
|
|
case '=': return ATEQUAL;
|
|
}
|
|
break;
|
|
case '^':
|
|
switch (c2) {
|
|
case '=': return CIRCUMFLEXEQUAL;
|
|
}
|
|
break;
|
|
case '|':
|
|
switch (c2) {
|
|
case '=': return VBAREQUAL;
|
|
}
|
|
break;
|
|
}
|
|
return OP;
|
|
}
|
|
|
|
int
|
|
_PyToken_ThreeChars(int c1, int c2, int c3)
|
|
{
|
|
switch (c1) {
|
|
case '*':
|
|
switch (c2) {
|
|
case '*':
|
|
switch (c3) {
|
|
case '=': return DOUBLESTAREQUAL;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case '.':
|
|
switch (c2) {
|
|
case '.':
|
|
switch (c3) {
|
|
case '.': return ELLIPSIS;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case '/':
|
|
switch (c2) {
|
|
case '/':
|
|
switch (c3) {
|
|
case '=': return DOUBLESLASHEQUAL;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case '<':
|
|
switch (c2) {
|
|
case '<':
|
|
switch (c3) {
|
|
case '=': return LEFTSHIFTEQUAL;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case '>':
|
|
switch (c2) {
|
|
case '>':
|
|
switch (c3) {
|
|
case '=': return RIGHTSHIFTEQUAL;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
return OP;
|
|
}
|