Vlrfsasm講習/仕組み

概要

本章以降、本HP向けの、Vlrfsasmを用いた変換器について解説します。本章では大まかな構造を示します。次章以降に使い方、最後に技術的な解説を詳しく載せます。

各部の作用

この変換器は、大きく5つに分けられます。

実行

変換器全体の実行を行います。Vlrfsasmのダウンロードと解凍、処理対象の判別の後、対象フォルダ内のvc.batを実行します。

この部分にはVlrfsasmのプログラムが含まれておらず、.bat.ymlで構成されています。

前処理

この部分では、vkhc.txttemp/textContent.vlraに変換します。

Vlrfsasmはどちらかと言えば数値とその計算に主眼が置かれており、文字列が大半のHPの記述には向きません。しかし、別の言語のインタプリタを書くのは非常にコストがかかるため、Vlrfsasmに変換してから処理するようにしています。

また、HTMLでエスケープ必須の3字&<>を予め変換し、後の工程での衝突を避けています。

詳しくは後の章で解説しますが、拡張表現や表の構文も、この前処理段階でVlrfsasmの表記に変換されます。

HTML

この変換器の目的は、HTMLの記述を楽にすることでした。そのため、この部分が本体であると言えます。しかしながら、実装はこの部分が最も簡単でした。

基本的にはHTMLのタグ構造を造る関数群ですが、全ページで共通である、メニューや下部のフッターなどは直書きしてしまっています。

コード彩色

プログラムのソースコードに、符ごとの色を付ける部分です。最も複雑な部分であり、記述にもかなりの手間がかかりました。

現在、プログラミング言語ではVlrfsasmとC言語にしか対応していませんが、必要に応じて字句規則を追加することができます。

数式

指数や分数、根号など、数式の表示を行う部分です。競技プログラミングや、電工班の物理の式に使えるのではないかと思います。

出力関数のhtmlに組み込むため、svg形式にしています。使っているフォントは、少し改造したComputer Modernです。フォントファイルからサイズを抽出し、描画する座標を計算しています。

経緯

この変換器ができた経緯は以下の通りです。読まなくても構いません。

物理部HP

物理部のHPはかなり昔から存在していました。FC2に2009年の記事が残っています。もう少し前のものもあったような気がしますが、消えてしまったのかもしれません。その後、62回生が2019年ごろにGoogle Sitesへ、63回生が2020年にGitHub Pagesに移しました。

FC2にはマークダウンがありますし、Google SitesはGUIで編集できました。GitHub Pagesもマークダウンを使えるのですが、移行した部員はひねくれていたので、全てHTMLとCSSで書こうとしました。

しかし、63回生は2020年に高2へ上がったわけですから、特に新歓以降はかなり忙しくなりました。CSSのクラス名などはほとんど数字という有様で、非効率を作業量で補っていました。

旧コード彩色器

Github Pagesに移行した直後は、コードの彩色機能はありませんでした。これは、当時この部員がアセンブリの講習資料を書いており、必要な箇所に下線を引く程度で解決できると思っていたからです。字句解析器の作成のコストがかなり高いことも知っていました。

ところが、2020年のお盆の前になり、競技プログラミング講習を書いていた部員が、外部の彩色サービスを使っていたことがわかりました。ここで前言を撤回し、javascriptによる彩色器を作ってみたところ、意外と素直にできてしまいました。焦っていたために、美しさを無視しましたが、差し当たり大きな問題は起きませんでした。

Vlrfsasm

結局、GitHub Pagesへの移行を行った部員は、2020年の11月に引退しました。その後は勉強に専念しようと思ってはいたようです。ところが、この部員にはハードルが2つありました。

まず、PICマイコンのアセンブリの講習資料、並びにHPそのものの講習資料などを書き終えていませんでした。非効率な作業はまだ山積みだったのです。

さらに、ちょっとした拍子に発作を起こし、プログラミング言語の設計を始めるという、やっかいな癖がありました。案の定、2021年の2月には、処理系の設計に取り掛かってしまいます。しかし、3月になると、PICマイコンのアセンブラを書いた経験などから、大きすぎて完成しないだろう、という予測が立ちました。

ここで、Vlrfsasmの開発が始まりました。これは、コンパイラの最終段階であるアセンブラを先に作ることで、終点を明らかにし、途中のプログラムを減らすためでした。しかし、開発中に、Vlrfsasmの有用性に気づいてしまいます。まず、それまで使っていた単純な記法に比べ、x64の記述量を3分の1程度にできることがわかりました。さらに、PICマイコンのアセンブラも、とても簡単に実装できることがわかってしまいます。

ここまでくれば、HP向け変換器としても使う計画が出てきました。勉強する意思はどこに行ってしまったのでしょうか。

変換器

ともかく、Vlrfsasmの開発と並行して、実装すべきHTMLの要素などを整理しました。2021年の10月ごろからは本格的に実装を始め、11月にコード彩色、12月に数式表示のライブラリを書きました。その後は講習資料を書いているようです。1年以上経って、ようやく本来の目的に取り掛かれたのです。これを反面教師として、引退前に講習資料を完成させることを、強く勧めます。