私がいることを念頭に置いて、this fileによって開始する:このファイルで指定された文法を変更
は、パーサーモジュールの対応する変化(../Modules/parsermoduleを最も可能性が高い必要があります.c)。 line 27で
:
funcdef: 'def' NAME parameters ['->' test] ':' suite
文法は、しかしdef
の簡単な置換のために変更すべきではありませんが、STDLIBの全体のPythonコードは大きく変更に感動されます。
私はこのソースのtarballを使用して、それを自分自身をテストし、Grammar
ファイルに'createfunc'
で'def'
を交換しています。 はしかし、CPythonのコンパイル時に、このエラーが発生します
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/udd/lbourneu/Documents/projects/cpython/Python-3.4.4/Lib/encodings /__init__.py", line 42
def normalize_encoding(encoding):
^
SyntaxError: invalid syntax
あなたはPythonコードのコンパイルを取得するために、新しいものに任意のdef
声明を交換する必要があります。
注:find . -type f -name "*" -exec sed -i 's/def /createfunc /g' {} +
を使用することは十分ではありません。
/usr/bin/mkdir -p Include
python3.4 ./Parser/asdl_c.py -h Include ./Parser/Python.asdl
File "./Parser/asdl_c.py", line 14
createfunc get_c_type(name):
^
SyntaxError: invalid syntax
コマンドpython3.4 ./Parser/asdl_c.py -h Include ./Parser/Python.asdl
とthis commentは、問題を示しています。あなたは、Pythonをコンパイルするのpythonを必要とし、両方が同じソースコードを理解する必要があります。 linked articleによって導入されたトリックは、それを置き換える代わりにキーワードを追加することです。
後で、defキーワードが完全に新しいものに置き換えられた文法で、コンパイルに2番目のもの(def
とsub
を両方とも理解する)を使用する第3のPythonをコンパイルできます。
なぜこれをやっていますか? Pythonのプリプロセッサは実際には新しい "インタプリタ"ではありません。あなたは何かを学ぼうとしていますか?本当に新しいものを発明しようか? – ShadowRanger
カスタム言語を作成しようとしている場合、Tclを見てみることをお勧めします。これにより、何かを再定義することができ、カスタムDSLを作成するのに最適な非常に単純な構文が得られます。 –
http://mathamy.com/import-accio-bootstrapping-python-grammar.html楽しい –