LoginSignup
4
0

More than 3 years have passed since last update.

巷で話題の漢文プログラミング「文言(wenyan)」入門。環境構築から基本文法まで

Last updated at Posted at 2019-12-20

巷で話題の漢文プログラミング「文言(wenyan)」入門。環境構築から基本文法まで

wenyanとは

昨日か一昨日くらいから若干ニュースフィードなどで話題になってる漢文が使えるプログラミング言語です。
wenyanはjavascriptやpythonにコンパイルすることで実行できます。

とりあえず公式のリポジトリを見てみるのがおすすめです。

screenshot01.png

公式リポジトリより引用

一番の胸アツポイントはこの漢文コードをいい感じにレンダリングできることです。
これが意味を持ったソースコードだと思うとめちゃくちゃ胸アツじゃないですか?

wenyanをインストール!

wenyanを書く方法としては二通りあって、オンラインで書く方法、もう一つがローカルにインストールして実行する方法です。

インストールについてはwindowsのみ説明します。
僕がmacを持っていないからです。あと一応linuxに関しては公式のreadme.mdを見ればわかると思います。

nodeのインストール

前提としてコンパイラがjavascriptでできているので、それを実行するためにnode.jsがインストールしてある必要があります。

インストールがまだであれば特に難しいことはないのでこちらを参考にインストールしておきましょう。

windows10にNode.jsをインストールする

タイトルのままですが、まずはwenyanのリポジトリをローカルにダウンロードもしくはcloneします。

好みの問題のような気がしますが一応僕はC:/Program Files以下にコピーしました。


git clone https://github.com/LingDong-/wenyan-lang.git

ローカルにwenyan-lang-masterがダウンロードできたかと思います。

wenyanコマンドを実行できるよう変更

できたら、wenyan-lang-masterディレクトリに移動し、以下のコマンドを実行します。

npm install
npm run make_cmdline

wenyan-lang-master/buildにwenyan-win.exeが作成されたかと思います。
このwenyan-win.exeを実行すればコンパイルができます。

ただ、毎回./build/wenyan-win.exeと打つのは少々面倒なので、パスを通してwenyanコマンドを実行できるようにします。

wenyan コンパイルしたいファイル

といった具合に実行できるようにします。

環境変数の編集を開いて、以下のパスを追加します。

C:\Program Files\wenyan-lang-master\build

これをコピペしなくても先ほどのwenyan-win.exeのパスを追加してあげればいいだけです。

bashなり任意のコマンドラインを起動しなおしてwenyanコマンドを実行してみます。

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

WENYAN LANG 文言 Compiler 0.01 (12/19/2019)

Usage: wenyan [options] [input files]

Options:
--eval    -e <string>  : Give a string instead of a file (default: `')
--exec    -x <boolean> : Execute ouput (default: `false')
--inspect -i <boolean> : Interactive REPL (default: `false')
--lang    -l <string>  : Language: js/py (default: `js')
--log        <string>  : Log file (default: `/dev/null')
--output  -o <string>  : Output file (default: `/dev/stdout')
--render     <string>  : Render input under given title (default: `none')
--roman   -r <string>  : Romanize identifiers (default: `none')

こんな感じに表示されていれば環境構築は終了です。
まあオンラインIDEを使えば一瞬なんですけどね。。。

wenyanでhelloworld

いよいよお待ちかねのhello worldです。
今回は漢文らしく問天地好在と出力してみましょう。

とりあえず何も考えず以下のコードをコピペしてください。

拡張子は.wyです。今回はhelloworld.wyとしましょう。

吾有一言。曰「「問天地好在。」」。書之。

以下のコマンドでコンパイルを実行します。

wenyan helloworld.wy -o helloworld.js

コンパイルが正常に実行されればhelloworld.jsというファイルが同じディレクトリに生成されているかと思います。
実行してみると、、、

node helloworld.js
問天地好在。

できました!wenyan流hello worldです!

wenyanの基本的な文法

変数

まずは変数の宣言についてです。以下のコードを見てください。

吾有一數。曰三。名之曰「甲」。

これは変数を宣言する最も簡単なコードです。
具体的には甲という変数に3を代入しています。
細かく解説すると以下の通りです。

まずは型の宣言についてです。整数、リスト、文字列など分けて書けます。
ですが、pythonやjavascriptには特にそういった型はありません。
将来的に別の言語にコンパイルできるようになった時のために一応説明します。

wenyan
吾有一數。 int
吾有一列。 list
吾有一爻。 bool
吾有一言。 string

が数のことで敷とは違う点に注意です。「かず」の予測変換で入力できます。

そして値の定義です。

曰{代入したい値}。

これで値を定義します。それぞれの型については以下の通りです。

wenyan
曰二。 int 2
曰列。 list 空のリストしか宣言できない。
曰陽。 bool true
曰陰。 bool false
曰「「噫吁戲」」。 string 噫吁戲

stringに関しては二重の「「」」を使う必要があります。

そして最後に変数名の定義です。変数名の定義は以下のようにして行います。

名之曰「天」。

これなら天という名前の変数に代入するという意味になります。
変数を参照する際は必ず「」を使う必要があります。
これらを踏まえてもう一度最初のコードを見てみると意外とシンプルで簡単なことが分かります。

吾有一數。曰三。名之曰「甲」。

このコードは以下のようにコンパイルされます。

var 甲=3;

吾有三敷。と変数の数を指定することで同時に複数の変数を定義することができます。

吾有三數。曰一。曰三。曰五。名之曰「甲」曰「乙」曰「丙」。
var a=1,b=3,c=5;

基本構文

続いては基本構文についてです。

if文

若三不大於五者。乃得「「想當然耳」」。若非。乃得「「怪哉」」也。

~ifにあたり、三大於二が条件式にあたります。
乃得からが条件を満たす際に評価される式、若非。乃得からがelseの際の式になります。、

if(3<=5){return "of course"}else{return "no way"}

このコードからわかる通り、条件演算子は以下のようになっています。
これらに関してはドキュメントに記述がなかったのですが、直感的に頑張れってことですかね?

wenyan javascript
大於 >
不大於 <=
小於 <
不小於 >=

for文

for文は数字を変更することができます。もちろん変数に置き換えることもできます。

100回繰り返す文

為是百遍。
    吾有一數。曰五。書之。
云云。

甲に3を代入し、3回実行

吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
    吾有一數。曰五。書之。
云云。
for (var i = 0; i < 100; i++){
    console.log(5);
}

これ以外の文法などについても随時追記していく予定です。

いよいよお待ちかね、wenyanのレンダリング

とにかくやりたかったのがこれ!!
、、なのですが、現在おそらくwindows非対応ではないかと思います。
というのも、ドキュメント通りにコマンドを実行してもまずwindows環境だとエラーが出ます。
おそらく内部で指定されているsvgファイルのデフォルトの保存先がdev/stdout.svgになっているからです。
-o オプションでこれを変更可能で、試してみたところコマンド自体は通り、指定通りのsvgファイルは生成されます。
ただ、以下の画像のように何も書いていないものが表示されてしまいます。。

wenyansvg.PNG

また、以下は公式のreadmeに記述されているオプション一覧です。

Usage: wenyan [options] [input files]

Options:
--eval    -e <string>  : Give a string instead of a file (default: `')
--exec    -x <boolean> : Execute output (default: `false')
--inspect -i <boolean> : Interactive REPL (default: `false')
--lang    -l <string>  : Language: js/py (default: `js')
--log        <string>  : Log file (default: `/dev/null')
--output  -o <string>  : Output file (default: `/dev/stdout')
--roman   -r <boolean> : Romanize identifiers (default: `true')

そしてこちらがコマンドで実際に表示されるヘルプです。

Usage: wenyan [options] [input files]

Options:
--eval    -e <string>  : Give a string instead of a file (default: `')
--exec    -x <boolean> : Execute ouput (default: `false')
--inspect -i <boolean> : Interactive REPL (default: `false')
--lang    -l <string>  : Language: js/py (default: `js')
--log        <string>  : Log file (default: `/dev/null')
--output  -o <string>  : Output file (default: `/dev/stdout')
--render     <string>  : Render input under given title (default: `none')
--roman   -r <string>  : Romanize identifiers (default: `none')

readmeにはなかった--renderオプションが追加されています。beta版という認識で気長に待つのがいい気がしますね。
それでも何か対策の方法がわかったらコメントで教えていただければと思います。

4
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0