2020年9月9日水曜日

Python9暫定仕様(1)

%P910:Python9暫定仕様(1)
  https://bonsai-juku.blogspot.com/2020/08/python9.html
`▼
--------------------------------------------------------------------------------
(0)「KanjiPython」は長いので「Python9」に統一.
  /*実体は既存資料への加筆*/
(1)参考資料
 ①【[Trial-1]】@「Python」試用録(1)」@
  https://oshino3.blogspot.com/2020/05/python.html
 ②【[Trial-5]】「if文による条件分岐 (2/2)」@
  https://oshino3.blogspot.com/2020/05/python5_48.html
 ③【[Trial-6]】「for文による繰り返し処理 (1/3)」@
  https://oshino3.blogspot.com/2020/05/python6.html
 ④【[Trial-14]】「Python」試用録(14)」@
  https://oshino3.blogspot.com/2020/06/python14.html
  ・%E11:資料の参照
  ・%E2:[Trial_□]のパラグラフに関するメモ
  ・%E3:行番号の付加
  ・%E4:使用不能文字対策
 ⑤【[Trial-18]】「Python」試用録(18)」@
  https://oshino3.blogspot.com/2020/07/python18.html
(2)【[%E2](1)③.[Trial_14]】
 ・これらの文字が文字列リテラルやコメントの外にある場合、無条件にエラーとなる
  /*〔これらの文字「$」,「?」,「`」の対策が不可欠〕*/
(3)【[%E3](2)③.[Trial_14]】
 ・行頭ではなく次のようにしたい/*「'#'を行頭から48文字目に」*/
  ①「OctalPython」の行番号は奇数桁の8進数
  ②末尾の1桁の8進数は行末でのレベル
  ③ファイルの全角スペースはすべて半角スペース2個と置換
  ④「OctalPython」のコンソール画面(2枚)は8×16文字
   一方で表示し,他方をバックグラウンドで編集.
(4)【[%11].[Trial_1]】/*「WilD.pdf」*/の記号の表現
 ①「 1 ?」は「0」,「1」のいずれかの数.
 ②「Py8.num8(177)」は8進数「177」を超えない非負の整数(自然数)のいずれか
  ・【[%61](2)[Trial_6]】の非決定性構文で使用./*〔(1)②〕*/
 ③「$」に「self」を使う
 ④「read,.」,「write,.」に「input()」,「print()」を使う.
(5)「(2)③」の「 1 ?」を「Py8.num8(1)」と表記
 ①「 1 ?」は「0」,「1」のいずれかの数.
 ②「Py8.num8(177)」は8進数「177」を超えない非負の整数(自然数)のいずれか
  ・【[%61](2)[Trial_6]】の非決定性構文で使用./*〔(1)②〕*/
(6)【[%21](0).[Trial_2]】の「"abcdefg"」を「Py8.str8('abcdefg')」と表記
(7)「Py8.str8('abc\n')」を「Py8.line8('abc')」と略記.
 ①「Py8.block8(\9002\9line8('abc'))」は
  ブロック内の2行目が「str8('abc\n')」であることを明示.
 ②行頭のインデント量と「\9002\9」から【[%E3](2)】のコンソール画面を作成.
 ③「Py8.str8('\9002\9abc\n\9003\9def\n')」を
  「Py8.line8('\9002\abc')」「Py8.line8('\9003\def')」と略記.
 ④ブロック内の行数を「511以下」に限定/*「末尾に空白行」*/
(8)「Py8.str9('ab\9embeded\9c\ndef\n')」の「\9embeded\9」はコメント
 ①インタプリタは「(7)②」の行末の6文字とコメントを削除したファイルを解釈実行
  /*「原稿の'\t'を'#\t'で置換」*/
--------------------------------------------------------------------------------
`▲
%911:Documents by Python.org
`▼
--------------------------------------------------------------------------------
 ①https://docs.python.org/ja/3/tutorial/
 ②https://docs.python.org/ja/3/library/functions.html
 ③https://docs.python.org/ja/3/glossary.html#glossary
--------------------------------------------------------------------------------
`▲【[%I1].[Trial-18]】からの引用

%912:字句解析
`▼
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
`▲

%913:構文解析
`▼
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
`▲

%914:解釈実行
`▼
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
`▲

%915:補遺
`▼
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
`▲

%919:EOF

2020年9月7日月曜日

%P710:Python7暫定仕様(1)

%P710:Python7暫定仕様(1)
★「Octal_Python」作成のための断片的備忘録です./*〔on line 編集 試行中〕*/
☆「Courier_Python」作成のための断片的備忘録です.
/*背景色は(茶: 編集・確認中; 灰色: 確認済; 緑: 非慣用記法; 白色: 初期化済)*/
/*「」は定義行のみ(他ではシアン).「」の語句があるパラグラフは「IDも茶」*/
・「Courier_Python」は長いので「Python7」と略記
・スクリプトは「Courier」で表示/*「フォントテスト★」*/ ★https://www.blogger.com/blog/post/edit/6859150935899261916/7173240099006907548

%711:Python7(1)/*〔原案〕*/
`▼
--------------------------------------------------------------------------------
(0)使えない文字も使ったスクリプトを「Formal_Python★」で実行するための試案 ★https://www.blogger.com/blog/post/edit/6943714883075862421/5845028739903561746
 ①「ASCII_Python」を「Courier_Python」と改称する
 ②使用不能文字がない「Tiny_Python」での実装を考える./*「(1)⑦#1」*/
  ・「Tiny_Python」では等幅フォントを使っていない
  ・文字列の背景色(オプション)の設定は断念する./*〔原稿を手動で着色〕*/
  ・文字列「□1」を「`$1_」で表示する./*「(2)」*/
  ・「Python7」の名前空間を「$SP7」で表示する
(1)参考資料
 ①tutorial「Python3 チュートリアル」
 ②reference「Python3 言語リファレンス」
 ③library「組み込み関数」
 ④[Trial-14]「Python」試用録(14)」@
  ・%E11:資料の参照
  ・%E2:[Trial_□]のパラグラフに関するメモ
  ・%E3:行番号の付加
  ・%E4:使用不能文字対策
 ⑤[Trial-18]「Python」試用録(18)」@
 ⑥制御文字
 ⑦Pythonの実装
  ・Pythonのインタプリタは多くのOSに対応している。
  #1.プログラマーのグローバルコミュニティは、無料のオープンソースリファレンス
   の実装であるCPythonを開発および保守している 。
  #2.非営利団体であるPythonソフトウェア財団は、
   PythonとCPythonの開発のためのリソースを管理・指導している。
(2)
原稿では「(1)④[%E4]」の使用不能文字「'$'」,「'?'」,「'`'」も使う
 ①「Python3」のトークン「□」の先頭に「'`'」を置き末尾に複数個の
  「' '」を付加して字句解析の簡略化する左端の「' '」を「'_'」で置換.
  /*〔一般形は「`_」.例:「if:」⇒「`if:_   」〕*/
 ②「Python3」の文字列「'□'」,「"□"」は単に''_」,「""_」と略記.
  /*〔「''_」,「""_」は空列; 1文字「"」,「'」は「'"'_」,「"'"_」〕*/
 ③このブログではスクリプトを「Courier」で表示
  ・等幅フォントだから見落とし難く背景色の設定も容易
  /*〔「Blogger」の「デフォルトのフォントは「MSP明朝」〕*/
 ④校正を容易にするために「(1)①」の「'`'」,「'_'」をシアンに着色してもよい
 ⑤原稿は「Terapad★」で作成し解釈実行前に「Python3」のトークンに戻す.
 ⑥制御文字は「\b」(08)「\t」(09)「\n」(0A)「\r」(0D)のみ
 ⑦行番号は考えない./*〔「(1)④」のようにコメント化してもよい〕*/
 ⑧全角スペースを積極的に使い「⑤」のときに2個の半角スペースに置換する.
--------------------------------------------------------------------------------
`▲①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳〔〕【】

%712:字句解析/*〔[%612](1)のコピーに加筆〕*/
`▼
--------------------------------------------------------------------------------
(1)形式ばらない Python の紹介/*[%71131]:[%711](3.1)*/
・式を入力すると、その結果が表示されます。
・演算子は他のほとんどの言語と同じように動作します
・丸括弧をグループ化に使うこともできます。
・浮動小数点を完全にサポートしています。
・文字列を記述する方法は複数あり、単引用符 で囲むか、二重引用符で囲みます。
 結果はどちらも同じ文字列になります。
引用符は、\ でエスケープできます。
・\ に続く文字を特殊文字として解釈されたくない場合は raw strings が使えます:
(2)変数と定数
・とほほのPython入門 - 変数・定数
(3)演算子
・とほほのPython入門 - 演算子
(4)関数
・とほほのPython入門 - 関数
(5)デリミタ
・Pythonで文字列を分割(区切り文字、改行、正規表現、文字数)
(6)リスト・タプル・辞書
・とほほのPython入門 - リスト・タプル・辞書
(7★)原案への付則(簡略化記法)を[%716]に追加
--------------------------------------------------------------------------------
`▲

%713:構文解析/*〔【[%613]】の部分コピーに加筆〕*/
`▼
--------------------------------------------------------------------------------
(0)参考資料
①if 文/*[%71141]:[%711](4.1)*/
②for文/*[%71141]:[%711](4.2)*/
③break文,continue文とelse節/*[%71144]:[%711](4.4)*/
④関数定義/*[%71147]*/
⑤デフォルトの引数値/*[%711471]*/
⑥キーワード引数/*[%711472]*/
⑦リスト型/*[%71151]*/
⑧タプルとシーケンス/*[%71153]*/
⑪集合型/*[%71154]*/
⑫辞書型/*[%71155]*/
(1)「if 文」
・「if num > 10:」+「print "BIG"」+「elif num == 10:」+「print "NORMAL"」+
 「else:」+「print "SMALL"」
(2)「for 文」
・Python の for 文は、任意のシーケンス型 (リストまたは文字列) 
 にわたって反復を行います。
 反復の順番はシーケンス中に要素が現れる順番です。
・break文,continue文とelse節
--------------------------------------------------------------------------------
`▲①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳

%714:解釈実行
`▼
--------------------------------------------------------------------------------
(0)エラー処理
参考資料
 ・プログラムが終了したら正常な場合でも、死んだ場合でも、通知して欲しい。
(2★)「exit()」関数の用法
 ⑩「printf("finished.")」,「return 0」
 ⑪「printf("undefined.")」,「return 1」
 ⑫「printf("invalid token.")」,「return 2」
 ⑬「printf("invalid syntax.")」,「return 3」
 ⑭「printf("waiting.")」,「return 4」
 ⑮「printf("interrupted.")」,「return 5」
(3)
--------------------------------------------------------------------------------
`▲

%715:試行例
`▼
--------------------------------------------------------------------------------
(0)各項目での表示内容:
 ・タイトル/*〔「⑩」で表示して「⑪-⑲」に補足〕*/
  --------------------------------------------
 ①「Python7」の原稿
  --------------------------------------------
 ②「Python3」のスクリプト
  --------------------------------------------
 ③実行結果
  --------------------------------------------
(1)参考資料. /*〔「Ex.1」不在〕*/
 ②@「tutorial【★】」/*「★https://docs.python.org/ja/3/tutorial/」*/
 ③@「tohoho【★】」/*「★http://www.tohoho-web.com/python/」*/
 ⑤@「Anaconda IDE★」の使い方 
「★https://www.blogger.com/blog/post/edit/6859150935899261916/7321409071314954091
  ・ファイルの直リンクはご遠慮ください。
(2)Ex.2:「Python.org【3.1.1. 数】」
 ⑩数式「5 * 3 + 2」の計算
 ⑪他のほとんどの言語と同じように動作します
 ⑫「(0)①」では原稿「□」を文字列として呈示/*〔【[%711](2)】に準拠〕*/
 ⑬「(2)②」の「5 * 3 + 2」はコンソール入力「>>> 5 * 3 + 2」から抽出
 ⑭「対話モード★」では、最後に表示された結果は変数 _ に代入されます。
  --------------------------------------------
 ①「"5 * 3 + 2"_」
  --------------------------------------------
 ②「5 * 3 + 2」
  --------------------------------------------
 ③「17」
  --------------------------------------------
(3)Ex.3:「tohoho【代数演算子(+, -, *, /, %, **, //)】」
 ⑩切り捨て除算「7 // 4」 「(-7) // 4」の計算
  --------------------------------------------
 ①「Python7」の原稿
  --------------------------------------------
 ②「Python3」のスクリプト
  --------------------------------------------
 ③実行結果
  --------------------------------------------
(4)Ex.4:「@IT【数値と算術演算 (2/2)】」
 ⑩演算子の優先順位
 ⑪ここまでに出てきた演算子(とその他の演算子や関数)の
  優先順位を高い順に以下の表にまとめておく。
 ⑫ここまでに説明した各演算は、整数と浮動小数点数を意識することなく行える。
 ⑬整数値と浮動小数点数値が被演算子に含まれている場合、
  整数値が浮動小数点数値として見なされるようになる。
  --------------------------------------------
 ①「Python7」の原稿
  --------------------------------------------
 ②「Python3」のスクリプト
  --------------------------------------------
 ③実行結果
  --------------------------------------------
(5)Ex.5:「Python試用録(14)★」
  ⑩原稿のコピー&ペースト
  ⑪「'#'を行頭から48文字目に」/*★[%E3](0)②*/
  ⑫ブロックの最終行を「\n」にする
  ⑬「①」の原稿を「tmp.txt」にコピーして
   「 」(全角),「`」,「_」を半角スペースで置換して「②」を作る
   ・「 」(全角)の方が「  」(半角)より幅が狭い./*〔「」内はCourier〕*/
  ⑭「行末の6文字」は「Python8」で手動で修正する.
  --------------------------------------------
 ①「Python7」の原稿
  --------------------------------------------
  number = 30                                 #001.1
                                              #002.1
  if number % 3 == 0:                         #003.1
   print('Fizz')                             #004.2
  elif number % 5 == 0:                       #005.1
   print('Buzz')                             #006.2
  elif number % 15 == 0:                      #007.1
   print('FizzBuzz')                         #008.2
  else:                                       #009.1
   print(number)                             #010.2
  \n                                          #011.1
 ※行番号(spreadsheetで作成)を10進表示に修正
  --------------------------------------------
 ②「Python3」のスクリプト
  --------------------------------------------
  number = 30 \t                              
                                              
  if number % 3 == 0: \t                      
    print('Fizz')                             
  elif number % 5 == 0: \t                    
    print('Buzz')                             
  elif number % 15 == 0: \t                   
    print('FizzBuzz') \t                      
  else: \t                                    
    print(number) \t                          
  \n                                          
  --------------------------------------------
 ③実行結果/*〔「>>>30」⇒「number = int(30) 」〕*/
  --------------------------------------------
  30                                          FizzBuzz
  --------------------------------------------
(6)Ex.6:

--------------------------------------------------------------------------------
`▲


%716:補遺
`▼
--------------------------------------------------------------------------------
(0)付則(簡略化記法)/*〔□は原稿の文字列〕*/
 ①「□」で改行
 ②「_□」は字下げ
 ③「`(□)`}」は長語/*〔□は10文字以上で80文字以下の文字列〕*/
 ④「`{□`}」は長文/*〔□は10行以上で80行以下の文〕*/
 ⑤「長語」「長文」は「+」の連鎖に分解してもよい/*〔「+」で改行〕*/
 「複合文」の連鎖を「ブロック」と略記する./*〔非「block」(1)①〕*/
 「ブロック」内で「goto 文」を使ってもよい
(2)「if 文」/*[%713](1)*/
 ①「if A:」+「_P」+「elif B:」+「_Q」+「else:」+「_R」
(3)「for 文★」/*[%713](2)*/
 ①「for x in L:」+「_P」./*〔e.g.「L:」=「 ['a', 'b', 'c']」〕*/
 ②「for x in range(N)」+「_P」
 ③「for x in L:」+「_P」+「_continue」
  /*〔「_P」=「_if A:」+「_Q」+「else:」+「_R」〕*/
 ④「for x in L:」+「_if A:」+「_P」+「__break」
  「_if B:」+「_Q」+「_continue」
(4)「while文★」
(5)行番号
(6)組み込み関数
 ・数論および数表現の関数
  math.ceil(x):x の「天井」 (x 以上の最小の整数) 
  math.floor(x):x の「床」 (x 以下の最大の整数)
  math.comb(n, k)
(7)正規表現
 ・特殊文字を以下に示します:
 '.':改行以外の任意の文字にマッチ/*〔小数点に支障〕*/
 '^':文字列の先頭にマッチ/*〔べき乗に支障〕*/
 '$':文字列の末尾/*〔「名前空間★」に支障〕*/
(8)「(7)」への補足
 ・「Python7」uses the following expressions which are against「(7)」.
(1)〔小数点に支障〕:「S = 5 * 5 * 3.1416」
(2)〔べき乗に支障〕:「(x + 2) * (x + 3) = x^{2} + 5 * x + 6」
(3)〔「名前空間★」に支障〕:「class $Py8」「class $Py9」を使いたい.
--------------------------------------------------------------------------------
`▲/*chars in {'$', '?' , '`'} are invalid.*/

%717:Note in English
`▼
--------------------------------------------------------------------------------
(0)【%715:試行例】/*「(2)-(4)」*/are explained
--------------------------------------------------------------------------------
`▲①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳〔〕【】

%718:FAQ
`▼
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
`▲

%719:EOF(@L1H)