エッセイ(小論文)タグ

プログラム言語作成の順番

よくあるプログラム言語の作成の本って
字句解析→構文解析→中間言語
ってウォーターフォールっぽく進むじゃないですか

僕もそういう本。結構、読んだんですけど
順番が逆じゃないのかな?と思うんですよね
中間言語とかいってそれはなくてもいいと思うんですけど
まああってもいいんですがw
内部表現と記述しましょうか

内部表現の仕様をしっかり把握してないと
構文解析のアウトプットの仕方を構成出来ないし
構文解析の仕組みを把握してないと字句解析出来ないんじゃないかな?
と思うんです

なんでそう思うかというと
簡単めの書籍で
入力を一行単位で入力してるんです
まあ最初の方なんですけど
字句解析も構文解析もすっとばして
いきなり内部表現にアクセスしてる訳ですな
そして割と最初の方でスタックのダンプ関数用意してます
スタックマシンなんで内部表現がスタックの構成割合が多いんですね
スタックをダンプする事が重要なのではなく
内部表現の見える化が重要なんでしょうね

内部表現は割と解決されている。と思うかもしれませんが
僕がちょこちょこ写経/書写してるホワイトスペースという簡単言語は
結構、色々な言語バージョン(CとかRubyとかPythonとか)
で書かれてるバージョンがあるんですけど
それぞれによって内部表現違うんですよね
言語それぞれに解法は一つとも違って
RubyでPython風にも書けるでしょうし、RubyでC風にも書けるっぽいです
逆にCでRuby風とかは辛いっぽそうでしょうけど
字句解析に正規表現使ってたりしますから
まあ、結構、作者の考え方によって
内部表現の表現に仕方って分かれるんじゃないのかな?って思います

書籍も色々あって
こうウォーターフォールじゃなく
アジャイルに発展を繰り返しながら発展していく書籍も結構あるんですけど
それでも考え方は一緒で
字句解析の発展→構文解析の発展→内部処理の発展
と進みます
なんていうか
そっちの方が説明し易いからそう書いているだけで
作者は割と同時進行で考えている気がします
でもそれも
内部処理の変更を把握しないと構文解析の変更を把握出来ないでしょうし
構文解析の変更を把握しないと字句解析の変更を把握出来ないと思うんです
同時進行でやる人も多いかもしれませんが

自分は、yaccとかも駆使してコーディングしたい気もありますが
やっぱいきなりyacc駆使は無理なんかなーみたいな
手で小型構文解析を繰り返して慣れてきてからっぽいっすね

後、言語処理系作りたくてもやっぱりプログラミングスキルも必要なのかな?と
才能じゃなく(それも重要なんですがw)作業量も必要っぽいっす
いわゆる一万時間の学習的な
自分は一万時間目指して写経/書写頑張って4年くらい経ち
15万行くらいっすw 一時間に100行(150行くらいやれる気もしますがw)
だとすると1500時間っすね。プログラミングそのものとか
書籍読んだ時間とももあるから純粋にそうじゃないけど
才能が無い事を嘆く前に学習量を積めって自分に言ってるごとしでした

死ぬ気でやる

カリスマブロガー。マナブ様のYOUTUBEで、
いやいや他の方のマナブ様の一日を追った動画で、
マナブ様に、ブログを書く秘訣は?と問われ、
一言、死ぬ気で書く。とおっしゃいました

フリーランスで気楽に書いてるはずなのに
結局、死ぬ気でやるんかいwみたいなw
そういえば誰かも、死ぬ気でやればなんとかなる。
って言ってたような。

自分はどうだろうね。文章は楽しいから書いてるので、
最近、スランプ気味ですけども
でも、結局、死ぬ気でやんないと成功しないってのは、
頭のどっかに入れとかなきゃいけないんでしょうね。

ちなみに一か月連続でブログを更新したら結果が出る。
みたいに書いてて、真に受けて一か月くらい
毎日更新しましたが、訪問者全然来なかったっていうねw
マナブ様も別の場所で何年もやってやっと収益になったとか
おっしゃってるし

強くてニューゲーム(ひょっとしてブレークスルーしたかも)

一昨日、久しぶりにwhitespaceという簡易言語を写経してたら
えたーなってたまんまのHSPへの移植が進みました
ひょっとして俺、ブレークスルーしたかもって調子こいてます
今回こそは上手くいくかもwww

なんか写経も一日100行くらいなのに
まあ昨日も100行くらいなんですがw
一昨日は300行くらいやったしw

なんか最近、カリスマブロガーマナブ様のYOUTUBEにはまってて
それ見てたら、なんだか、人生、上手くいくような気がしてきて
そっから派生したブレークスルー疑惑でしたw

whitespaceのHSPへの移植も、これこそ強くてニューゲームっすよw

強くてニューゲーム(VIMとかFFAとか)

自分の写経用のエディタはVIMなんですが

理由は分割時、別々のファイルを開けるし
移動が自由自在なとこです
画面を半画面づつ動かせるのと
一行づつ動かせるのが好きです
(カーソル行じゃないですよ)

そして、最近、チュートリアルをやってみたら
前よりしっくり来ました
コレがたぶんあれです
カリスマブロガー。マナブ様の言う
強くてニューゲームです

チュートリアルの学習は期間を開けて三回目くらいなんですが
そのたび、強くてニューゲームになってきますねw

そこのあなたも
以前、挑戦してみた事に挑戦してみてはどうですか?
強くてニューゲームになるかもしれませんよ

そして、今日、HSPのプロコンの放送を見てて
ずっと見るのも飽きるんでFFAをやってて
なんとはなしに、ソースコードをDLして覗いてみたんですよ
ほぼメインCGIに記述してて2000行くらいw
あんな有名ゲームが2000行くらいですって
という訳でFFAの写経がTODOに追加されました
これも強くてニューゲームっすなwww

昔はPerlとか全然読めなかったんですけど
今、読んだら昔より理解出来る気がする
強くてニューゲームw

4blog_令和の数学エッセイ(小論文)006

今回は(xz + y)(azzzz + bzzz + czz + dz + e)
を別のやり方で計算してみます
①xz(azzzz + bzzz + czz + dz + e)
②y(azzzz + bzzz + czz + dz + e)
の二つの合計で計算してみます
今回はz=0.01ということで小数の計算ってかんじでw
①はxazzzzz + xbzzzz + xczzz + xdzz + xez
②はyazzzz + ybzzz + yczz + ydz + ye
になります
合計すると
③xazzzzz + (xb + ya)zzzz + (xc + yb)zzz + (xd + yc)zz + (xe + yd)z + ye
になります。こっちの方がやたら簡単なんですがw
小数なんでひっくり返して
④ye + (xe + yd)z + (xd + yc)zz + (xc + yb)zzz + (xb + ya)zzzz + xazzzzz になります
⑤a=11 b=22 c=33 d=44 e=55 x=23 y=45と代入してみましょうか
⑥2475 + 3245z + 2497zz + 1749zzz + 1001zzzz + 253zzzzz
になり合計して
2507.7014590353
になる予定w
計算ミス怖い

4blog_令和の数学エッセイ(小論文)005

今日は(azzzz + bzzz + czz + dz + e)(xz + y)
を計算してみようと思います
片方が変数少ないとどうなるのかな?的な
今日はz=100 100進数で
BIGNUMとか想定してみると
z=10じゃ小さすぎるし
大きいとデバッグしにくいでしょうし
z=100でいきます
zを2byte 4byteを想定するとz=100くらいが丁度いいと思います
z=10 zはbyte(-128~127)でもいいんでしょうけど
小さいと計算おそそうですからね
まずは
①A=bzzz + czz + dz + eとすると
②(azzzz + A)(xz + y)になります
すると
③axzzzzz + A(xz + y) + ayzzzzになります
④B = czz + dz + eとすると
⑤A(xz + y) = (bzzz + B)(xz + y)になります
すると
⑥ ⑤はbxzzzz + B(xz + y) + byzzzになります
すると③は
⑦ axzzzzz + (ay+bx)zzzz + B(xz + y) + byzzzになります
⑧C = dz + eとすると
⑨B(xz + y) = (czz + C)(xz + y)になります
すると
⑩ ⑨はcxzzz + C(xz + y) + cyzzになります
すると⑦は
⑪ axzzzzz + (ay + bx)zzzz + (by + cx)zzz + C(xz + y) + cyzz
になります
⑧C = dz + eなので
⑫C(xz + y) = (dz +e)(xz + y) = dxzz + (dy +xe)z +yeになります
すると⑪は
⑬ axzzzzz + (ay +bx)zzzz + (by +cx)zzz + (dx + cy)zz +
(dy + xe)z +yeになります
試しに a=12 b=34 c=56 d=78 e=90 x=22 y =33を代入してみましょうか
⑭ 264zzzzz+1144zzzz+2354zzz+3564zz+5148z+2970
100進数なので全部足すと
⑮2zzzzzz + 75zzzzz + 67zzzz + 90zzz + 15zz + 77z + 70
になります(合ってるかはわからないっすw 計算ミス怖いw)

アメリカ中国貿易戦争

アメリカと中国は貿易戦争の真っ最中ですが、
いつか何かが起きる、種はあったと思います。

中国はアメリカに対して、多額の貿易黒字ですが、
アメリカに対しての貿易黒字国は、
日本、韓国等ですが、日本も韓国も親米国家なんですよね。
アメリカという大国に親米国としてワガママいうみたいに、
親米国なので許されてたのかもしれません。
しかし、中国は親米国ではありません。
親米国ではない国が、
貿易で多額に儲けたら、そりゃあ、関係は険悪になりますよね。
アメリカが中国に制裁する度に中国もアメリカに制裁措置を取ってますが、
元々多額の貿易黒字なので、中国に分が悪いっすね。
前にブログにも書きましたが、情報産業に関しては、
中国も発展して、資本が中国にも分散として流入することは、
アメリカにとってもいいことだ。とは思いますが。

アメリカ貿易赤字

アメリカは多額の貿易赤字を計上しています。
その理由として、日本、韓国、中国等、
貿易黒字推進型経済構造の国家の存在みたいになってます。
しかし、僕はその理由はそれもあるけれど、
それ以外にもあるのではないか。と思いました。

アメリカと言えば、情報産業の先進国です。
情報産業は将来有望な分野の産業です。
情報産業はアメリカが例外的に突出して発展しています。
将来有望な情報企業がたくさんあるので、
世界中から資金が集まるのだと思います。
日本はアメリカとの貿易で貿易黒字になってますが、
その儲けはアメリカへ投資するのも多そうです。
将来有望なアメリカの情報企業とかに。

現在の主流は、変動為替制度です。
貿易赤字が続くと、為替が下がりますが、
投資が流入すると為替が上がります
将来有望な情報企業をたくさん持つアメリカは、
貿易は赤字ですが、投資がたくさん来るので、
為替は上がるのではないでしょうか。

と、ここでアメリカの情報産業を追い上げる国家があります。
中国の存在です。
国内市場は発展し続け、既にGDPは世界第二位です。
民主主義の抑圧もあって、ツイッターとか、
利用不可っぽく、逆に中国固有のつぶやきサービスあるっぽく、
情報産業的に嫌われっぽいのが、逆に国内の情報産業の発展を招いています。

情報産業のアメリカの一人勝ち傾向は為替上昇を招きますので、
中国という将来有望な国家へと資金流入が分散すると、
アメリカの為替も下がるのではないでしょうか。

アメリカと中国は貿易戦争中ですが、
中国の情報産業への圧迫はアメリカ自身の首を絞めるものにもなりかねません。
中国の情報産業への資金の流入はアメリカの為替にも良い影響を与えるのだとも、思います。

令和の数学エッセイ(小論文)004 (X + Y)(X – Y) = X×X – Y×Y その4

とりあえず一か月間、頑張って毎日投稿しようと思い
ここのブログは5月14日から始めたらしく
約半月くらいっすね
一年間頑張らないと成果出ないみたいなんで
先は長いっすね
一年ってのはちょっとググった時に読んだので
根拠は薄いっすw

数学ガール読んでます

未知のものを変数にしよう。みたいに書いてます
未知のものって。数か、実数か、文字列か。
と考えてしまう。アマグラマー思考w
ここでの変数は、数でしょうね

数式の変数をプログラムの変数のように扱ってみよう。
これが、現在の僕の思考なのかもしれません。
(X + Y)(X – Y) = XX – YY
という公式に数字をあてはめてみると面白い
みたいな記述から始まったんですがw

前前回に(a + b + c)2乗とか(a + b + c + d)2乗とか
の計算で、2乗はちょっと逃げなので(計算が楽になる)
2乗じゃない掛け算を16進数で計算してみたいと思います

まず(l + m + n + o)(p + q + r + s)を計算してみます

それぞれの変数に入ってる数値は
① l = b×16×16×16
② m = a×16×16
③ n = 2×16
④ o = 1
⑤ p = d×16×16×16
⑥ q = c×16×16
⑦ r = 4×16
⑧ s = 3
としましょうか

普通にやっても面白くないので
今回は後ろから計算していこうと思います
後置記法っぽいですね
⑨N = l + m + n
⑩R = p + q + r
とまとめると
⑪(N + o)(R + s)になります
展開すると
⑫NR+Ns+Ro+osになります
④ o = 1
⑧ s = 3
を代入すると
⑬NR+Ns+Ro+3になります
⑨N = l + m + n
⑩R = p + q + r
なので半分展開を開くと
⑭NR+(l + m + n)s+(p + q + r)o+3になります
めんどくさいので16を変数にしちゃいましょうか
⑮z=16
① l = b×16×16×16
② m = a×16×16
③ n = 2×16
⑧ s = 3
なので代入すると
⑯NR+3×b×zzz+3×a×zz+6z+(p+q+r)o+3 になります
⑤ p = d×16×16×16
⑥ q = c×16×16
⑦ r = 4×16
④ o = 1
なので代入すると
⑰NR+3×b×zzz+3×a×zz+6z+d×zzz+c×zz+4z+3になります
足し算して
⑱NR+48zzz+46zz+az+3になります

なんか前々回より数値が大分スッキリしてますなw

⑲M=l+m
⑳Q=p+q とおくと
NR は
②①(M+n)(Q+r) になります
展開して
②②MQ+Mr+Qn+nr になります
⑲M=l+m
⑳Q=p+q なので少し代入すると
②③MQ+lr+mr+pn+qn+nr になります
① l = b×16×16×16
② m = a×16×16
③ n = 2×16
⑤ p = d×16×16×16
⑥ q = c×16×16
⑦ r = 4×16
なので代入すると
②④MQ+4×b×zzzz+4×a×zzz+2×d×zzzz+2×c×zzz+8×zz
になります
加算して16進数にすると
②⑤MQ+78zzzz+76zzz+8zzになります
⑱NR+48zzz+46zz+az+3なのおで
代入すると
②⑥MQ+78zzzz+(48+76)zzz+(8+46)zz+az+3
になります(計算結果大分怪しくなってきましたねw)
足し算して
②⑦MQ+78zzzz+bezzz+ezz+az+3になります

⑲M=l+m
⑳Q=p+q なので
②⑧MQ=(l+m)(p+q)です
展開して
②⑨lp+lq+mp+mqになります
① l = b×16×16×16
② m = a×16×16
⑤ p = d×16×16×16
⑥ q = c×16×16なので
代入して
③①b×d×zzzzzz+b×c×zzzzz+a×d×zzzzz+a×c×zzzz
になります
加算すると
③②b×d×zzzzzz+(b×c+a×d)×zzzzz+a×c×zzzz
になり、16進数に直すと
③③8fzzzzzz+106zzzzz+78zzzzになります

②⑦MQ+78zzzz+bezzz+ezz+az+3だったので
代入して
③④8fzzzzzz+106zzzzz+f0zzzz+ezz+az+3
という解になりました

という訳で元号も令和に変わりましたこともあり
数学っぽいエッセイ小論文を書いていきたいとも思っております
令和で改めてってことは、平成でもエッセイ小論文を書いていました
http://buzazann.blogspot.com
アドレスはコチラ

令和の数学エッセイ(小論文)003 (X + Y)(X – Y) = X×X – Y×Y その3

何桁かの掛け算をする時
一番上の桁だけの計算で大体得られないかという仮定

なんかまんま計算するより
(X – Y)(X – Y)の方が考えやすいっすねw

ひと桁×ひと桁の場合
9×9=81(二桁)ひと桁の最大数×ひと桁の最大数
(10 – 1)(10 – 1)=100-20+1=81
1×1=1(一桁)ひと桁の最小数×ひと桁の最小数
ひと桁×ひと桁=一桁~二桁

二桁×二桁の場合
99×99=??
(100 – 1)(100 – 1)=10000-200+1=9801
二桁の最大数×二桁の最大数=4桁
10×10=100
二桁の最小数×二桁の最小数=3桁
二桁×二桁=4桁~3桁

二桁×ひと桁の場合
99×9=??
(100 – 1)(10 – 1)=1000-100-10+1=891
二桁の最大数×ひと桁の最大数=3桁
10×1=10
二桁の最小数×ひと桁の最小数=2桁
二桁×ひと桁=3桁~2桁

とまあ。10進数の場合でした

16進数で考えると

ひと桁×ひと桁の場合
F×F=15×15=?? ひと桁の最大数×ひと桁の最大数
(16 – 1)(16 – 1)=256-32+1=225
電卓使ってw
225/16=14余り1
F×F=E1(二桁)
1×1=1(一桁)ひと桁の最小数×ひと桁の最小数
ひと桁×ひと桁=一桁~二桁

二桁×二桁の場合
FF×FF=??
電卓使ってw
(256 – 1)(256 – 1)=65536-512+1=65025
65025=254×256+1=FE01(たぶんw)
二桁の最大数×二桁の最大数=4桁
16×16=256=100(16進数)
二桁の最小数×二桁の最小数=3桁
二桁×二桁=4桁~3桁

二桁×二ひと桁の場合
FF×F=??
電卓使ってw
(256 – 1)(16 – 1)=4096-256-16+1=3825
3825-14×256=3825-3584=241 241/16=15余り1
3825=14×256+15×16+1=EF1(たぶんw)
二桁の最大数×ひと桁の最大数=3桁
16×1=16=10(16進数)
二桁の最小数×ひと桁の最小数=2桁
二桁×ひと桁=3桁~2桁

16進数で考える場合、(X – 1)(Y – 1)で考える必要ないかも
どっちにしろ電卓使わないと計算大変だしw

掛け算で、その桁における最小値と最大値をそれぞれ計算して
掛け算を行う結果の桁を予想するのはいい演算かも
そんなにめんどくさくないしw

自分BIGNUMとか自力で実装とかしてみたいんですけど
掛け算の桁の計算がわかんなかったんですけど
このような演算で計算出来るらしい

という訳で元号も令和に変わりましたこともあり
数学っぽいエッセイ小論文を書いていきたいとも思っております
令和で改めてってことは、平成でもエッセイ小論文を書いていました
http://buzazann.blogspot.com
アドレスはコチラ↑