「文言」ruby出力に挑戦

## はじめに
漢文風プログラミング言語「文言/wenyan-lang」は、初期commitが2019年12月という新しい言語で、現在進行形で開発が進んでいます。その美しいレンダリングは漢字圏に住む我々日本人としても目の離せない言語です。

初期時はハードルが高めでしたが、現在はnpmからインストールし簡単に使い始められます。まだの方は[こちら](https://qiita.com/libru1/items/6542b45a945fc7fe10cf)の記事を参考に今すぐインストールしてみて下さい

この記事では「文言/wenyan-lang」で書かれたプログラムからrubyソースに変換し、実行してみます

### 動作確認
こちらの記事の確認環境は以下の通りです

> npm v6.13.4
wenyan v0.2.0

## 実行

[公式](http://wenyan-lang.lingdong.works/)を見ると
<img width="1003" alt="Screen Shot 2020-01-04 at 1.24.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334227/efe34796-31f4-c145-58c7-9e0185dd6f71.png">

ruby出力に対応しているとの事、
usageを確認します

```sh
$ wenyan
,_ ,_
 \/ ==
 /\ []

WENYAN LANG 文言 Compiler v0.2.0

Usage: wenyan [options] [files...]

Options:
  -v, --version        Output the version
  -l, --lang <lang>    Target language, can be "js", "py" or "rb" (default: 
                       "js")
  -c, --compile        Output the compiled code instead of executing it
  -e, --eval <code>    Evaluate script
  -i, --interactive    Interactive REPL
  -o, --output [file]  Output compiled code or executing result to file
  -r, --render         Outputs renderings
  --roman [method]     Romanize identifiers. The method can be "pinyin", 
                       "baxter" or "unicode"
  --outputHanzi        Convert output to hanzi (default: true)
  --log <file>         Save log to file
  --title <title>      Override title in rendering
  -h, --help           Display help
```

_--lang rb_ で行けそうです。
実行してみると

```sh
$ wenyan -l rb examples/helloworld+.wy 
Target language "rb" is not supported for direct executing. Please use --compile option instead.
```
替わりに_--compile_オプションを使えとの事、実行してみます

```sh
$ wenyan --compile rb examples/helloworld+.wy 
ENOENT: no such file or directory, open '/xxxxxxx/wenyan-lang/rb'
```
_--compile_のオプションの指定方法がいまいちのようです
言語指定してみましょう

```sh
$ wenyan --compile -l rb examples/helloworld+.wy 
# encoding: UTF-8
require 'forwardable'
<略　45行>
#####
甲=3
甲.times do |_rand1|
	_ans1="問天地好在。"
	p([_ans1].join)
end 
```

なんか50行を超える行が出力されましたが、最後の5行は公式にあった出力です。やった:v:

ruby出力方法がわかったので、[公式](http://wenyan-lang.lingdong.works/)にある「エラトステネスの篩」を実行してみます
<img width="1003" alt="Screen Shot 2020-01-04 at 2.56.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/334227/37773514-d285-6440-78a9-abcff48f98c2.png">

また、その実行結果を保存し、_ruby_で実行してみます

```sh
$ wenyan --compile  -l rb　-o sieve.rb examples/sieve.wy 
$ tail -n 42 sieve.rb 
```
```rb
def 埃氏篩(甲)
	掩=Ctnr.new
	甲.times do |_rand1|
		掩.push(true)
	end 
	_ans1=甲/2;
	甲半=_ans1;	戊=2
	while true do
		if 戊==甲半
			break
		end 
		戌=2
		while true do
			if 戌==甲半
				break
			end 
			_ans2=戊*戌;
			合=_ans2;			if 合<=甲
				掩[合-1]=false
			else
				break
			end 
			_ans3=1+戌;			戌=_ans3
		end 
		_ans4=1+戊;		戊=_ans4
	end 
	諸素=Ctnr.new
	戊=2
	while true do
		if 戊==掩.length
			break
		end 
_ans5=掩[戊-1];
		素耶=_ans5;		if 素耶
			諸素.push(戊)
		end 
		_ans6=1+戊;		戊=_ans6
	end 
	return 諸素
end

_ans7=埃氏篩(100);p([_ans7].join)
```
```sh
$ ruby sieve.rb
"[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]"
```

rubyで100までの素数が求められました:ok_hand:

## おわりに

美しいレンダリングとruby出力がしたくて、「文言」言語の存在を知った12月19日その日に[「文言」アドベントカレンダー](https://qiita.com/advent-calendar/2019/wenyan_lang)を作成しました。

はじめは環境も作れず参加者も増えず、無謀なのかと思いましたが、開発が進み簡単に実行できるようになりました。みなさんも是非美しいレンダリング、漢字でプログラム出来る新感覚、体験してみて下さい

入力がちょっと大変なのですが、[リファレンス](https://github.com/LingDong-/wenyan-lang#syntax-cheatsheet)や[スニペット](https://wenyan-snippets.glitch.me/)も活用し楽しんで下さい