b2c2
BASIC言語風の独自のプログラミング言語(?)のソースコードファイルからCASL2のソースコードファイルを生成しました
- 生成されたCASL2コードの動作確認にはCASL2アセンブラ/COMET2シミュレータ等を別途用意する必要があります
- 生成コードの最適化等はしてません(無意味・無駄・冗長な処理が複数あります。例: 分岐によるジャンプ処理などはラベルをつけた
NOP
で実現、など) - リポジトリのbasic_src_examplesにあるCASL2コードはIPAのCASL II シミュレータ(Java,V2.00(2005/05/27))で一応は動作確認済みです
Example: Fizz Buzz (その1)
リポジトリの basic_src_examples/fizz_buzz_1/ のディレクトリに入力のBASICファイルと出力のCASL2ファイルがあります
生成コマンド: cargo run -- -src fizzbuzz.bas
(basic_src_examples/fizz_buzz_1/ での実行を想定)
入力ファイル: basic_src_examples/fizz_buzz_1/fizzbuzz.bas
'
' FIZZ BUZZ (1)
'
DIM I AS INTEGER
DIM C AS INTEGER
PRINT "LIMIT?"
INPUT C
C = MAX(1, MIN(100, C))
FOR I = 1 TO C STEP 1
SELECT CASE I MOD 15
CASE 0
PRINT "FIZZBUZZ"
CASE 3, 6, 9, 12
PRINT "FIZZ"
CASE 5, 10
PRINT "BUZZ"
CASE ELSE
PRINT I
END SELECT
NEXT I
Example: Fizz Buzz (その2)
リポジトリの basic_src_examples/fizz_buzz_2/ のディレクトリに入力のBASICファイルと出力のCASL2ファイルがあります
生成コマンド: cargo run -- -src fizzbuzz.bas
(basic_src_examples/fizz_buzz_2/ での実行を想定)
入力ファイル: basic_src_examples/fizz_buzz_2/fizzbuzz.bas
'
' FIZZ BUZZ (2)
'
Dim s As String
Dim n As Integer
Do
Print "Number?"
Input s
If s = "end" Then
Exit Do
End If
n = CInt(s)
If n < 1 Then
Print "Invalid Input"
Continue Do
End If
If n Mod 15 = 0 Then
s = "FizzBuzz"
ElseIf n Mod 3 = 0 Then
s = "Fizz"
ElseIf n Mod 5 = 0 Then
s = "Buzz"
Else
s = CStr(n)
End If
Print s
Loop
その他
b2c2の実行に関して
- b2c2の実行バイナリの提供はありません。ソースコードからビルドして実行してください
- b2c2はCLI(command-line interface)のアプリです。出力するメッセージに日本語が含まれることがあるため日本語表示が可能なシェルやコマンドプロンプトを使用する必要があります
- 網羅的にチェックはしてないのでBASICコード次第では期待どおりの動作をしないCASL2コードが生成される可能性もあります
- BASICソースコードはUTF-8(BOMなし)で文字エンコーディングされたファイルとみなして読み込みます
- 生成のCASL2ソースコードはUTF-8(BOMなし)の文字エンコーディングで出力されます
- 文字数の埋め込みがある場合はUnicodeスカラ値の個数を文字数として埋め込みます
- b2c2のBASIC言語についてはリポジトリのdoc/language.mdに概要が書いてあります
b2c2のビルドに関して
- rustcのバージョンは1.58.0、cargoのバージョンは1.58.0を使用しました (他のバージョンでコンパイル可能かは未確認です)
- toolchainはstable-i686-pc-windows-msvcを使用しました (toolchainは実行環境や開発環境に合わせて選択するものですが、他のtoolchainでb2c2をコンパイル可能かは未確認です)
- Editionは2021を使用。標準ライブラリを使用しており、外部ライブラリは直接使用してません
b2c2のビルドと実行の例
ソースコードを取得してFizz Buzz (その1)を変換しFizz Buzz (その2)を変換するまでの一連のコマンドライン
※gitとcargoの両方ともインストール済みとします
※この例の場合では初回のcargo run
実行時にb2c2が暗黙的にビルドされます
b2c2をインストールして使う場合
※cargoをインストール済みとします
- インストール
※cargo install
がソースコードの取得とビルドと実行バイナリの配置を行います
- 実行
※BASICのソースコードファイルは適宜用意してください
- アンインストール
※実行バイナリの削除のみ。インストール時に取得されたソースコード等はどこかに残ったままのようです