「Python」試用録(2)
%2:「Python」試用録(2)
「WILDの処理系」作成のための「断片的備忘録」です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
%21:「コンソール入出力」
`▼
--------------------------------------------------------------------------------
(0)「Ex.1」/*W7」のプログラム*/
01 `do:( `let:( $Name `.like,. "abcdefg" ) `;
02 `write,. 'Name = ?' `; `read,. Name `;
03 `write,.('Hello ' + 'Name' `+ ' !\n' `)
04 `) '\n'
①「`□ 」は「W7」の予約トークン.
/*「どのトークンも末尾に1個以上の半角スペース(左端をシアン)」*/
②「write,. □」=「print(□)」
③「"abcdefg"」は文字列を格納する領域*/
④行頭の偶数桁の8進数は行番号
⑤「`)\n」はブロックの末尾/*「"\n"が必須」*/
⑥「$Name」は「NewName」「Name」は「OldName」
/*「"$Name"は一つのトークン.記号表の説明は割愛」*/
②[Py_]https://docs.python.org/ja/3/library/functions.html
③https://python-introduction.com/?p=1138
④https://ja.wikipedia.org/wiki/ASCII#ASCII制御文字
(2)「W7」の文法
「W7」では数値を奇数桁の8進数で表示/*「ビットごとの論理演算が容易」*/
①「`8( 020 ? )」は値が「020」以下の自然数(非負の整数)
②「`9( 020 ? )」は最大長が「020」以下の文字列./*「確保する領域の指定」*/
③「020 ?」は勧告値./*「ソース作成時に確定値を入力」*/
④「W7」の制御文字は値が「`8( 020 ? )」の1文字
(3)「W6」の制御文字「`8( 074 + 3 ? )」を次のように略記
①「8( 074 ) = '\%2'」(ESC) /*「ASCIIの`8( 033 )」*/
②「8( 075 ) = '\n'」(LF) /*「ASCIIの`8( 012 )」*/
③「8( 076 ) = '\b'」(BS) /*「ASCIIの`8( 010 )」*/
④「8( 077 ) = '\0'」(NUL) /*「ASCIIの`8( 000 )」*/
(6)複数行の「Console」入出力は「□ '\n' □ '\n' □」
/*「行末には'\n'を付けない」*/
(6)複数行の「Console」入出力は「□」,「□」,「□」./*「末尾に'\n'を付けない」*/
(7)「W7」の「`let:( □ `)」を「`< □ `>」と略記./*「`□」は文字列検索校正用*/
①「W7」の「`do:( □ )」を「`{ □ `}」と略記.
②「W7」の「X `.( □ )」を「X .`{ □ `}」と略記./*「Xでデータ型を指定」*/
③「W7」の「`{□`}」のデータ型は「ASCII」の文字列.
--------------------------------------------------------------------------------
`▲
%22:「W7」の「Python」での略記
`▼
--------------------------------------------------------------------------------
(1)予約トークンを「`□ 」と略記./*「末尾に''」*/
/*「末尾には1個以上の''があればよい.左端の''の背景色をシアンにしてもよい」*/
①「`let:( □ `) 」を「`< □ `> 」と略記./*「"`<","`>"の定義」*/
「`do:( □ `) 」を「`{ □ `} 」と略記./*「"`{","`}"の定義」*/
②「X `.( □ `) 」を「X .`{ □ `} 」と略記./*「Xでデータ型を指定」*/
③「`{ □`} 」のデータ型は「ASCII」の文字列.
(1)「`< □ `> 」,「`{ □ `}」の「`<」「`>」「`{」「`}」に表現を変更.
(2)「□」⇒「□」の左辺の記号を右辺のように略記.
①「`like,.」⇒「=」,「`same,.」⇒「:=」./*「演算子".="とは別物」*/
(3)「W7」の自然数(負でない整数)/*「"□"と'□'の使い分けは紛らわしい」*/
①「奇数桁の8進数□」⇒「`8( □ ) 」
②「'□'」「長さ9以下の文字列□」⇒「`9(□)」./*「□の前後のスペースなし」*/
③「'□'」「偶数桁の10進数□」⇒「`9(□) 」.
--------------------------------------------------------------------------------
%23:「W7」の構文
%24:「W7」の解釈実行
%25:「W7」の中間コード
%26:「W6」の記法の変更
`▼
--------------------------------------------------------------------------------
(0)「W7」では「W6」の記法に拘らず次のように妥協する
(1)参考資料 ①[Py_2.5]https://docs.python.org/ja/3/reference/lexical_analysis.html#operators
(2)「F(A; B; C)」⇒「F(A, B, C)」
(3)演算子/*「①」*/
+ - * ** / // % @
<< >> & | ^ ~ :=
< > <= >= == !=
(4)デリミタ/*「①」*/
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=
・ピリオドは浮動小数点数や虚数リテラル中にも置けます。
・ピリオド三つの列はスライス表記における省略符号 (ellipsis) リテラルとして特別な意味を持ちます。
・リスト後半の累算代入演算子 (augmented assignment operator) は、
字句的にはデリミタとして振舞いますが、演算も行います。
(5)以下の印字可能 ASCII 文字は、他のトークンの一部として特殊な意味を持っていたり、
字句解析器にとって重要な意味を持っています:
' " # \
(6)以下の印字可能 ASCII 文字は、Python では使われていません。
これらの文字が文字列リテラルやコメントの外にある場合、無条件にエラーとなります:
$ ? `
--------------------------------------------------------------------------------
`▲「(6)」は要対策!
%27:「Spyder★」の画面
★https://drive.google.com/file/d/1Rphcht77g5EPJ1r0gH09NwoHyk65IyJX/view?usp=sharing
`▼
--------------------------------------------------------------------------------
(1)の実行結果/*「コンソール1/A」*/
----------------------------------------
input your name: World
Hello World !
----------------------------------------
(2)「W7」のプログラム
「`<$X = 9(7')`>」「write,. 'input your name:'」「read,. X」
「write,. 'Hello'+ X + '!'」
(3)「Python」のプログラム
「X = 'my_name'」/*「変数の宣言・初期化★」*/
★https://www.javadrive.jp/python/var/index1.html#section1
「print( 'nput your name:' )」
「my_name = input('>> ')/*「コンソールからの入力★」*/
★https://www.python-izm.com/introduction/console_input/
「print('Hello' + X + '')」/*「コンソールへの出力」*/
--------------------------------------------------------------------------------
`▲
%28:「W8」のプログラム/*「[%291]に移動」*/
%291:MicroPython
「microPython」で検索すると「https://ja.wikipedia.org/wiki/MicroPython」
が見つかったので紹介します./*「英語に自信がある人用」*/
`▼
--------------------------------------------------------------------------------
(1)【[%26]】で引用した
次に以下のプログラムについて考えてみよう。
name = input('input your name: ')
message = 'Hello ' + name + ' !'
print(message)
(2)In[2]:
name = input('input your name: ')
message = 'Hello ' + name + ' !'
------------------------------------------------------
print(message)
input your name:「World」/*「Nexus7」では『World』不可*/
------------------------------------------------------
「input your name:」というメッセージと共に
セルの下にテキストボックスが表示されるので、
名前を入力して[Enter]キーを押す
(3)テキストボックスに何か名前を入力して[Enter]キーを押すと、Helloメッセージが表示される
input your name:「World」
Hello World !
------------------------------------------------------
(4)「(2)」「(3)」を
「In[2]:」
name = input('input your name: ')
message = 'Hello ' + name + ' !'
print(message)
「Out[2]:」
input your name:「World」
Hello World !
と略記して,とりあえずこのように表示する
「IT-2.py」を作って少しずつ改良し,
「W7」専用の「OctalPython」を作っていきます
(5)「microPython」で検索すると「https://ja.wikipedia.org/wiki/MicroPython」
が見つかったので紹介します./*「英語に自信がある人用」*/`▼
------------------------------------------------------------
(1)MicroPython[2](マイクロパイソン)は、C言語で記述されマイクロコントローラ上での動作に最適化された、
Python 3とかなりの互換性を持つプログラミング言語処理系である[3][4]。
(2)ライブラリ
https://micropython-docs-ja.readthedocs.io/ja/latest/library/
(3)ソースコードはGitHub上でMIT Licenseで公開されている[12]。
(4)CircuitPython
2017年7月には、MicroPythonのフォークとして、
教育用途および簡単に使えることを主眼にしたCircuitPythonが作成された。
MicroPythonとCircuitPythonでは、サポートするハードウェアが若干異なる
(5)外部リンクに「MicroPython」,「MicroPython on GitHub」あり
------------------------------------------------------------
(6)「BabyPython」や「NanoPython」も既存だから「OctalPython」で回避.
[1]https://gramho.com/explore-hashtag/babypython
[2]https://github.com/joburgjazzer/BabyPython
[3]https://github.com/WilliamAvila/NanoPython
[4]https://registry.hub.docker.com/r/zasimov/nanopython
[5]https://wiki.python.org/moin/Tiny%20Python
[6]https://github.com/mattharrison/Tiny-Python-3.6-Notebook
/*字句解析を容易にするために末尾に1個以上のスペースを付加*/
②どのトークンも10文字以下./*「"&7777777"」で10文字*/
③どの行も64文字以下.
④どのブロックも512行以下.
⑤どのモジュールも8ブロック以下.
⑥どのパッケージも8モジュール以下.
(8)「Python」用の追加予約トークン./*【[%511]】*/
①「`let:(□)」を「`<□`>」と略記./*「"`< "」,「"`> #let"」の定義*/
②「`do:(□)」を「&`.{□`}」と略記./*「"`.{ "」,「"`} #do"」の定義*/
③「□.(□)」を「□`.{□`}」と略記./*「"`.{ "」,「"`} #."」の定義*/
④「`data:(□)」を「`{□`}」と略記./*「"`.{ "」,「"`} #data"」の定義*/
⑤「.like,.」を「=」と略記
⑥「.same,.」を「:=」と略記
⑦埋め込みコメント「`/*□`*/」の「`/*」,「`*/」を追加.
⑧⑨
(9)対話モードでは、(トップレベルの) 複合文の最後に空白行を入れなくてはならないことに注意してください;
これは、複合文の終端をパーザが検出するための手がかりとして必要です。/*【[Py_9.3.]】*/
--------------------------------------------------------------------------------
`▲
%292:TinyPython
`▼
--------------------------------------------------------------------------------
(0)
(1)参考資料
①https://wiki.python.org/moin/FrontPage
②https://wiki.python.org/moin/BeginnersGuide
③https://wiki.python.org/moin/EmbeddedPython
④https://www.openembedded.org/wiki/Main_Page
⑤http://www.tinypy.org/
(2)「①」からの引用
・Pythonは、驚くべきパワーと非常に明確な構文を組み合わせています。
モジュール、クラス、例外、非常に高レベルの動的データ型、動的型付けがあり ます。
・多くのシステムコールやライブラリ、
さまざまなウィンドウシステムへのインターフェイスがあります。
・新しい組み込みモジュールは、CまたはC ++(または選択した実装に応じて他の言語)で簡単に記述できます。
・Pythonは、使いやすいスクリプトまたはオートメーションインターフェイスを必要とする
他の言語で記述されたアプリケーションの拡張言語としても使用できます。
(3)「⑤」からの引用
・tinypyは64kのコードでのPythonの最小限の実装です
・tinypyには多くの機能が含まれています:
tinypyで書かれたパーサーとバイトコードコンパイラ
完全にブートストラップ
・C で書かれたガベージコレクションを備えたluaesque仮想マシンは、
「スタックレス」機能ではなく「スタックレス」機能です。
・クロスプラットフォーム:)それはwindows / linux / macosxの下で実行されます
Pythonのかなりまともなサブセット
クラスと単一継承
変数またはキーワード引数を持つ関数
文字列、リスト、辞書、数字
モジュール、内包表記
完全なトレースバックを伴う例外
一部の組み込み
・バッテリーは含まれていません - まだ
これ以上何が必要でしょうか?
(4)
--------------------------------------------------------------------------------
`▲
「WILDの処理系」作成のための「断片的備忘録」です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
`▼
--------------------------------------------------------------------------------
(0)「Ex.1」/*W7」のプログラム*/
01 `do:( `let:( $Name `.like,. "abcdefg" ) `;
02 `write,. 'Name = ?' `; `read,. Name `;
03 `write,.('Hello ' + 'Name' `+ ' !\n' `)
04 `) '\n'
①「`□ 」は「W7」の予約トークン.
/*「どのトークンも末尾に1個以上の半角スペース(左端をシアン)」*/
②「write,. □」=「print(□)」
③「"abcdefg"」は文字列を格納する領域*/
④行頭の偶数桁の8進数は行番号
⑤「`)\n」はブロックの末尾/*「"\n"が必須」*/
⑥「$Name」は「NewName」「Name」は「OldName」
/*「"$Name"は一つのトークン.記号表の説明は割愛」*/
(1)参考資料
①[@IT_2]/*「Hello Python(2/3)」*/②[Py_]https://docs.python.org/ja/3/library/functions.html
③https://python-introduction.com/?p=1138
④https://ja.wikipedia.org/wiki/ASCII#ASCII制御文字
(2)「W7」の文法
「W7」では数値を奇数桁の8進数で表示/*「ビットごとの論理演算が容易」*/
①「`8( 020 ? )」は値が「020」以下の自然数(非負の整数)
②「`9( 020 ? )」は最大長が「020」以下の文字列./*「確保する領域の指定」*/
③「020 ?」は勧告値./*「ソース作成時に確定値を入力」*/
④「W7」の制御文字は値が「`8( 020 ? )」の1文字
(3)「W6」の制御文字「`8( 074 + 3 ? )」を次のように略記
①「8( 074 ) = '\%2'」(ESC) /*「ASCIIの`8( 033 )」*/
②「8( 075 ) = '\n'」(LF) /*「ASCIIの`8( 012 )」*/
③「8( 076 ) = '\b'」(BS) /*「ASCIIの`8( 010 )」*/
④「8( 077 ) = '\0'」(NUL) /*「ASCIIの`8( 000 )」*/
(6)複数行の「Console」入出力は「□ '\n' □ '\n' □」
/*「行末には'\n'を付けない」*/
(6)複数行の「Console」入出力は「□」,「□」,「□」./*「末尾に'\n'を付けない」*/
(7)「W7」の「`let:( □ `)」を「`< □ `>」と略記./*「`□」は文字列検索校正用*/
①「W7」の「`do:( □ )」を「`{ □ `}」と略記.
②「W7」の「X `.( □ )」を「X .`{ □ `}」と略記./*「Xでデータ型を指定」*/
③「W7」の「`{□`}」のデータ型は「ASCII」の文字列.
--------------------------------------------------------------------------------
`▲
%22:「W7」の「Python」での略記
`▼
--------------------------------------------------------------------------------
(1)予約トークンを「`□ 」と略記./*「末尾に''」*/
/*「末尾には1個以上の''があればよい.左端の''の背景色をシアンにしてもよい」*/
①「`let:( □ `) 」を「`< □ `> 」と略記./*「"`<","`>"の定義」*/
「`do:( □ `) 」を「`{ □ `} 」と略記./*「"`{","`}"の定義」*/
②「X `.( □ `) 」を「X .`{ □ `} 」と略記./*「Xでデータ型を指定」*/
③「`{ □`} 」のデータ型は「ASCII」の文字列.
(1)「`< □ `> 」,「`{ □ `}」の「`<」「`>」「`{」「`}」に表現を変更.
(2)「□」⇒「□」の左辺の記号を右辺のように略記.
①「`like,.」⇒「=」,「`same,.」⇒「:=」./*「演算子".="とは別物」*/
(3)「W7」の自然数(負でない整数)/*「"□"と'□'の使い分けは紛らわしい」*/
①「奇数桁の8進数□」⇒「`8( □ ) 」
②「'□'」「長さ9以下の文字列□」⇒「`9(□)」./*「□の前後のスペースなし」*/
③「'□'」「偶数桁の10進数□」⇒「`9(□) 」.
--------------------------------------------------------------------------------
%24:「W7」の解釈実行
%25:「W7」の中間コード
%26:「W6」の記法の変更
`▼
--------------------------------------------------------------------------------
(0)「W7」では「W6」の記法に拘らず次のように妥協する
(1)参考資料 ①[Py_2.5]https://docs.python.org/ja/3/reference/lexical_analysis.html#operators
(2)「F(A; B; C)」⇒「F(A, B, C)」
(3)演算子/*「①」*/
+ - * ** / // % @
<< >> & | ^ ~ :=
< > <= >= == !=
(4)デリミタ/*「①」*/
( ) [ ] { }
, : . ; @ = ->
+= -= *= /= //= %= @=
&= |= ^= >>= <<= **=
・ピリオドは浮動小数点数や虚数リテラル中にも置けます。
・ピリオド三つの列はスライス表記における省略符号 (ellipsis) リテラルとして特別な意味を持ちます。
・リスト後半の累算代入演算子 (augmented assignment operator) は、
字句的にはデリミタとして振舞いますが、演算も行います。
(5)以下の印字可能 ASCII 文字は、他のトークンの一部として特殊な意味を持っていたり、
字句解析器にとって重要な意味を持っています:
' " # \
(6)以下の印字可能 ASCII 文字は、Python では使われていません。
これらの文字が文字列リテラルやコメントの外にある場合、無条件にエラーとなります:
$ ? `
--------------------------------------------------------------------------------
`▲「(6)」は要対策!
%27:「Spyder★」の画面
★https://drive.google.com/file/d/1Rphcht77g5EPJ1r0gH09NwoHyk65IyJX/view?usp=sharing
`▼
--------------------------------------------------------------------------------
(1)の実行結果/*「コンソール1/A」*/
----------------------------------------
input your name: World
Hello World !
----------------------------------------
(2)「W7」のプログラム
「`<$X = 9(7')`>」「write,. 'input your name:'」「read,. X」
「write,. 'Hello'+ X + '!'」
(3)「Python」のプログラム
「X = 'my_name'」/*「変数の宣言・初期化★」*/
★https://www.javadrive.jp/python/var/index1.html#section1
「print( 'nput your name:' )」
「my_name = input('>> ')/*「コンソールからの入力★」*/
★https://www.python-izm.com/introduction/console_input/
「print('Hello' + X + '')」/*「コンソールへの出力」*/
--------------------------------------------------------------------------------
`▲
%28:「W8」のプログラム/*「[%291]に移動」*/
「microPython」で検索すると「https://ja.wikipedia.org/wiki/MicroPython」
が見つかったので紹介します./*「英語に自信がある人用」*/
`▼
--------------------------------------------------------------------------------
(1)【[%26]】で引用した
次に以下のプログラムについて考えてみよう。
name = input('input your name: ')
message = 'Hello ' + name + ' !'
print(message)
(2)In[2]:
name = input('input your name: ')
message = 'Hello ' + name + ' !'
------------------------------------------------------
print(message)
input your name:「World」/*「Nexus7」では『World』不可*/
------------------------------------------------------
「input your name:」というメッセージと共に
セルの下にテキストボックスが表示されるので、
名前を入力して[Enter]キーを押す
(3)テキストボックスに何か名前を入力して[Enter]キーを押すと、Helloメッセージが表示される
input your name:「World」
Hello World !
------------------------------------------------------
(4)「(2)」「(3)」を
「In[2]:」
name = input('input your name: ')
message = 'Hello ' + name + ' !'
print(message)
「Out[2]:」
input your name:「World」
Hello World !
と略記して,とりあえずこのように表示する
「IT-2.py」を作って少しずつ改良し,
「W7」専用の「OctalPython」を作っていきます
(5)「microPython」で検索すると「https://ja.wikipedia.org/wiki/MicroPython」
が見つかったので紹介します./*「英語に自信がある人用」*/`▼
------------------------------------------------------------
(1)MicroPython[2](マイクロパイソン)は、C言語で記述されマイクロコントローラ上での動作に最適化された、
Python 3とかなりの互換性を持つプログラミング言語処理系である[3][4]。
(2)ライブラリ
https://micropython-docs-ja.readthedocs.io/ja/latest/library/
(3)ソースコードはGitHub上でMIT Licenseで公開されている[12]。
(4)CircuitPython
2017年7月には、MicroPythonのフォークとして、
教育用途および簡単に使えることを主眼にしたCircuitPythonが作成された。
MicroPythonとCircuitPythonでは、サポートするハードウェアが若干異なる
(5)外部リンクに「MicroPython」,「MicroPython on GitHub」あり
------------------------------------------------------------
(6)「BabyPython」や「NanoPython」も既存だから「OctalPython」で回避.
[1]https://gramho.com/explore-hashtag/babypython
[2]https://github.com/joburgjazzer/BabyPython
[3]https://github.com/WilliamAvila/NanoPython
[4]https://registry.hub.docker.com/r/zasimov/nanopython
[5]https://wiki.python.org/moin/Tiny%20Python
[6]https://github.com/mattharrison/Tiny-Python-3.6-Notebook
(7)「OctalPython」の概略仕様
①「W7」のトークン「□」を「"□ "」で表示./*字句解析を容易にするために末尾に1個以上のスペースを付加*/
②どのトークンも10文字以下./*「"&7777777"」で10文字*/
③どの行も64文字以下.
④どのブロックも512行以下.
⑤どのモジュールも8ブロック以下.
⑥どのパッケージも8モジュール以下.
(8)「Python」用の追加予約トークン./*【[%511]】*/
①「`let:(□)」を「`<□`>」と略記./*「"`< "」,「"`> #let"」の定義*/
②「`do:(□)」を「&`.{□`}」と略記./*「"`.{ "」,「"`} #do"」の定義*/
③「□.(□)」を「□`.{□`}」と略記./*「"`.{ "」,「"`} #."」の定義*/
④「`data:(□)」を「`{□`}」と略記./*「"`.{ "」,「"`} #data"」の定義*/
⑤「.like,.」を「=」と略記
⑥「.same,.」を「:=」と略記
⑦埋め込みコメント「`/*□`*/」の「`/*」,「`*/」を追加.
⑧⑨
(9)対話モードでは、(トップレベルの) 複合文の最後に空白行を入れなくてはならないことに注意してください;
これは、複合文の終端をパーザが検出するための手がかりとして必要です。/*【[Py_9.3.]】*/
--------------------------------------------------------------------------------
`▲
%292:TinyPython
`▼
--------------------------------------------------------------------------------
(0)
(1)参考資料
①https://wiki.python.org/moin/FrontPage
②https://wiki.python.org/moin/BeginnersGuide
③https://wiki.python.org/moin/EmbeddedPython
④https://www.openembedded.org/wiki/Main_Page
⑤http://www.tinypy.org/
(2)「①」からの引用
・Pythonは、驚くべきパワーと非常に明確な構文を組み合わせています。
モジュール、クラス、例外、非常に高レベルの動的データ型、動的型付けがあり ます。
・多くのシステムコールやライブラリ、
さまざまなウィンドウシステムへのインターフェイスがあります。
・新しい組み込みモジュールは、CまたはC ++(または選択した実装に応じて他の言語)で簡単に記述できます。
・Pythonは、使いやすいスクリプトまたはオートメーションインターフェイスを必要とする
他の言語で記述されたアプリケーションの拡張言語としても使用できます。
(3)「⑤」からの引用
・tinypyは64kのコードでのPythonの最小限の実装です
・tinypyには多くの機能が含まれています:
tinypyで書かれたパーサーとバイトコードコンパイラ
完全にブートストラップ
・C で書かれたガベージコレクションを備えたluaesque仮想マシンは、
「スタックレス」機能ではなく「スタックレス」機能です。
・クロスプラットフォーム:)それはwindows / linux / macosxの下で実行されます
Pythonのかなりまともなサブセット
クラスと単一継承
変数またはキーワード引数を持つ関数
文字列、リスト、辞書、数字
モジュール、内包表記
完全なトレースバックを伴う例外
一部の組み込み
・バッテリーは含まれていません - まだ
これ以上何が必要でしょうか?
(4)
--------------------------------------------------------------------------------
`▲
コメント
コメントを投稿