Skip to content
hikalium edited this page Sep 1, 2016 · 7 revisions

nv言語へようこそ!

  • nv言語は,non-volatileな変数,つまり永続変数をネイティブにサポートするプログラミング言語です.
  • nv言語は,ほとんどの演算子を仕様で定義しません.
  • 演算子は,ユーザーが自由に作成することができ,非常に柔軟な文法を実現可能です.
  • デフォルトの言語セットは提供されます.
  • 同等のことを目指すほかの実装として,川合秀実氏によるEssenが存在し,現在はEssenの仕様に基づき独自に実装しています.

nv言語の構文解析

  • 入力はまずトークン列に分割されます.トークン列は,各文字のタイプが分かっていれば生成可能です.
  • トークン列の中で,演算子だと分かっているトークンすべてを,対応する演算子オブジェクトで置換します.
  • トークン列の中で,数値だと分かっているトークン全てを,対応する数値オブジェクトで置換します.
  • トークン列に含まれる演算子の中で,opList中で最も前にある演算子をひとつ選びます.
  • (opListは優先順位でソートされており,優先順位が等しい場合には,先に追加された演算子のほうが優先的に選択されます.)
  • 結合順(右・左)に基づき,演算子の実行を試みます.
  • 結合順は,演算子の優先順位の偶奇で決定されます.(偶数: 左結合, 奇数: 右結合)
  • 演算子の実行に失敗した場合には,以下の手順に従います.
  • 同じトークンを対象とし,実行を試みた演算子より優先順位が低い演算子があれば,その演算子の演算子オブジェクトで置換します.
  • 上記のような演算子が存在しない場合は, 未定トークンで置換します.
  • 演算子の実行に成功した場合は,その結果に応じてトークン列が変更されます.
  • 上記の作業を,該当する演算子がなくなるまで繰り返します.
  • 繰り返した結果,それでもまだ未定トークン(Unknown)が残っていれば,エラーとします.
  • エラーでなければ,トークン列の中で最後に存在する値オブジェクトの評価値を,実行結果とします.
  • 実行中にプログラムによる画面への出力が一度も行われていなければ,その実行結果を表示します.
Clone this wiki locally