Python编译器/解析器中FloorVide的定义/源代码在哪里?

Python编译器/解析器中FloorVide的定义/源代码在哪里?,python,parsing,Python,Parsing,我搜索定义了FloorDiv甚至Div、Add、Sub等的代码,但没有我想要的定义 在Python/ast.c中: case DOUBLESLASH: return FloorDiv; 在Python/compile.c中: case BINARY_FLOOR_DIVIDE: case BINARY_TRUE_DIVIDE: return -1; case INPLACE_FLOOR_DIVIDE: case INPLACE_TRUE_DIV

我搜索定义了FloorDiv甚至Div、Add、Sub等的代码,但没有我想要的定义

在Python/ast.c中:

case DOUBLESLASH:
    return FloorDiv;

在Python/compile.c中:

 case BINARY_FLOOR_DIVIDE:
    case BINARY_TRUE_DIVIDE:
        return -1;
    case INPLACE_FLOOR_DIVIDE:
    case INPLACE_TRUE_DIVIDE:
        return -1;
在Parser/Python.asdl中:

operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift
             | RShift | BitOr | BitXor | BitAnd | FloorDiv
语法/语法:

arith_expr: term (('+'|'-') term)*
term: factor (('*'|'@'|'/'|'%'|'//') factor)*

帮助我找到了这些地方,但不是我想要的。

如果我理解正确,您会问,在CPython源代码中,实际的地板分割操作是在哪里定义的?在这种情况下,它位于文件中:

静态PyObject*
long_div(PyObject*a,PyObject*b)
{
PyLongObject*分区;
检查BINOP(a,b);
如果(l_divmod((PyLongObject*)a,(PyLongObject*)b,&div,NULL)<0
div=NULL;
返回(PyObject*)div;
}
该函数依次调用
l\u divmod()
,您也可以在该文件中找到该函数的定义


这实际上是Python3中的
int
类型,但出于历史原因,该文件名为
longobject.c
。请注意,像
\uu floordiv\uu
/
)这样的方法是按类定义的,因此上述方法仅适用于整数。要查找浮动的代码,请参阅
Objects/floatobject.c

中的
float\u floor\u div()
,如果我理解正确,您会问,在CPython源代码中,实际的地板分割操作是在哪里定义的?在这种情况下,它位于文件中:

静态PyObject*
long_div(PyObject*a,PyObject*b)
{
PyLongObject*分区;
检查BINOP(a,b);
如果(l_divmod((PyLongObject*)a,(PyLongObject*)b,&div,NULL)<0
div=NULL;
返回(PyObject*)div;
}
该函数依次调用
l\u divmod()
,您也可以在该文件中找到该函数的定义


这实际上是Python3中的
int
类型,但出于历史原因,该文件名为
longobject.c
。请注意,像
\uu floordiv\uu
/
)这样的方法是按类定义的,因此上述方法仅适用于整数。要查找浮动的代码,请参见
Objects/floatobject.c

中的
float\u floor\u div()!这是完美的答案!还有一个小问题,Cpython在哪里连接stringslook,就像Objects/unicodeobject.c(PyUnicode_Append)和Python/ceval.c(unicode_concatenate)的组合一样。无论出于何种原因(可能是性能),unicode类型都没有定义
\uuuuu add\uuuuuu
\uuuuu iadd\uuuuuu
,但它们是在ceval中显式处理的。谢谢!这是完美的答案!还有一个小问题,Cpython在哪里连接stringslook,就像Objects/unicodeobject.c(PyUnicode_Append)和Python/ceval.c(unicode_concatenate)的组合一样。无论出于何种原因(可能是性能),unicode类型都没有定义
\uuuuu add\uuuuu
\uuuu iadd\uuuuu
,而是在ceval中显式处理。
arith_expr: term (('+'|'-') term)*
term: factor (('*'|'@'|'/'|'%'|'//') factor)*
static PyObject *
long_div(PyObject *a, PyObject *b)
{
    PyLongObject *div;

    CHECK_BINOP(a, b);
    if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
        div = NULL;
    return (PyObject *)div;
}