Python의 구문에 새로운 문을 추가하는 것이 가능합니까?
예, Python의 구문에 새로운 문을 추가하는 것이 가능합니다. 하지만 이를 위해서는 Python 인터프리터의 코드를 수정해야 합니다.
Python 구문에 새 명령문을 어떻게 추가할 수 있나요?
문법 파일(문법/문법)을 수정하여 다음과 같이 할 수 있습니다. 새 문에 대한 정의를 추가하고 AST 생성 코드(Python/ast.c)를 수정하여 새 구문 분석 트리 노드를 AST 노드로 변환합니다. 그런 다음 바이트코드 컴파일 코드(Python/compile.c)를 수정하여 새 문을 바이트코드로 컴파일합니다. 마지막으로 기호 테이블 생성 코드(Python/symtable.c)를 수정하여 새 문을 처리합니다.
예:
"until" 문을 추가하려면 "while"의 보완:
<code class="text">compound_stmt: if_stmt | while_stmt | until_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated until_stmt: 'until' test ':' suite</code>
<code class="c">| Until(expr test, stmt* body)</code>
<code class="c">static stmt_ty ast_for_until_stmt(struct compiling *c, const node *n) { /* until_stmt: 'until' test ':' suite */ REQ(n, until_stmt); if (NCH(n) == 4) { expr_ty expression; asdl_seq *suite_seq; expression = ast_for_expr(c, CHILD(n, 1)); if (!expression) return NULL; suite_seq = ast_for_suite(c, CHILD(n, 3)); if (!suite_seq) return NULL; return Until(expression, suite_seq, LINENO(n), n->n_col_offset, c->c_arena); } PyErr_Format(PyExc_SystemError, "wrong number of tokens for 'until' statement: %d", NCH(n)); return NULL; }</code>
<code class="c">static int compiler_until(struct compiler *c, stmt_ty s) { basicblock *loop, *end, *anchor = NULL; int constant = expr_constant(s->v.Until.test); if (constant == 1) { return 1; } loop = compiler_new_block(c); end = compiler_new_block(c); if (constant == -1) { anchor = compiler_new_block(c); if (anchor == NULL) return 0; } if (loop == NULL || end == NULL) return 0; ADDOP_JREL(c, SETUP_LOOP, end); compiler_use_next_block(c, loop); if (!compiler_push_fblock(c, LOOP, loop)) return 0; if (constant == -1) { VISIT(c, expr, s->v.Until.test); ADDOP_JABS(c, POP_JUMP_IF_TRUE, anchor); } VISIT_SEQ(c, stmt, s->v.Until.body); ADDOP_JABS(c, JUMP_ABSOLUTE, loop); if (constant == -1) { compiler_use_next_block(c, anchor); ADDOP(c, POP_BLOCK); } compiler_pop_fblock(c, LOOP, loop); compiler_use_next_block(c, end); return 1; }</code>
<code class="c">case While_kind: VISIT(st, expr, s->v.While.test); VISIT_SEQ(st, stmt, s->v.While.body); if (s->v.While.orelse) VISIT_SEQ(st, stmt, s->v.While.orelse); break; case Until_kind: VISIT(st, expr, s->v.Until.test); VISIT_SEQ(st, stmt, s->v.Until.body); break;</code>
참고: 이는 높은 수준의 개요입니다. 자세한 단계와 설명은 인용된 기사를 참조하세요.
위 내용은 Python 구문에 새 명령문을 어떻게 추가할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!