自作 C コンパイラ
SDI YUKI
C コンパイラを、GCC C++ で作成しました。
コンパイラ名 plu
プリプロセッサを作成しました。
プリプロセッサ名 plu1
plu で、コンパイルしました。
plu1 完成時点で、plu をプリプロッセッサに対応しました。
また、plu1 を プリプロセッサ plu1 に対応しました。
現在、GCC C に対応した、バージョンを 作成中です。
※20220323
実行モジュール・サンプルにコンパイラ include ファイルを追加しました。
自作 C コンパイラ 概要
実行モジュール・サンプル(plu.zip)
C サンプル(sample.zip)
C サンプルファイルのコンパイル実行
plu.zip に、含まれている bin, inlude が、必要
pluc, plul は、実行パスが通っていること
$home/include に、インクルードファイルが設定されていること
calc2.c
------------------------------------------------------------------------------------
$ plu clac2.c
Preprocessor calc2.c
Compile calc2.i
Assemble calc2.s
$ plul calc2.o -lm
Link calc2.o -lm
calc2.o: In function `exec':
calc2.i:(.text+0x1bd): warning: the `gets' function is dangerous and should not be used.
$ ./calc2 --help
使用方法 : calc [--help] [-v]
入力 :
CALC> <計算式> 計算実行
CALC> // コマンド終了
オプション :
--help このヘルプ情報を表示
-v バージョンを表示
計算式 :
<計算式> := [ <式> ]
<式> := <式1> { (+|-) <式1> } 左優先
<式1> := <式2> { (*|/|%) <式2> } 左優先
<式2> := (+|-) <式2> 右優先
| ( <式> )
| <数値>
| <関数名>( <式> )
<数値> := <数字>{<数字>} [ . {<数字>} ]
| . <数字>{<数字>}
<関数名> := <英字> { <英数字> }
<英数字> := <英字> | <数字>
<英字> := A-Z | a-z
<数字> := 0-9
関数一覧 :
ABS ACOS ASIN ATAN
CEIL COS COSH
EXP
FLOOR
LN LOG
SIN SINH SQRT
TAN TANH
$ ./calc2
CALC>>2*3
6
CALC>>//
$
------------------------------------------------------------------------------------
カックロパズル
sum.c include/SumPuz.h SumPuz.c
q76.txt 問題
------------------------------------------------------------------------------------
$ ./sum --help
Usage : sum [--help]
標準入力フォーマット
最大数値
縦マス数
横マス数
{ 縦位置 横位置 H/V 個数 合計 }
$ pluc sum.c
Preprocessor sum.c
Compile sum.i
Assemble sum.s
$ pluc SumPuz.c
Preprocessor SumPuz.c
Compile SumPuz.i
Assemble SumPuz.s
$ plul sum.o SumPuz.o
Link sum.o SumPuz.o
$ ./sum <q76.txt
XXXXXXXXXXXX
XX896XXX214X
X39758X41328
X12X46123X17
XX71243X5789
XXX937XXX59X
XX37152X19XX
X812X931287X
X62XXX124X51
X978X758X793
XX567143928X
XXX985X475XX
XX159276834X
X897X495X139
X97X968XXX26
XX867359X218
XXX84X63215X
XX37XXX853XX
X8597X15342X
X62X48967X19
X94812X74132
XX142XXX135X
*** データ処理後 ***
[XXXXXXXXX][XXXXXXXXX][+++++++++][+++++++++][+++++++++][XXXXXXXXX][XXXXXXXXX][XXXXXXXXX][+++++++++][+++++++++][+++++++++][XXXXXXXXX]
[XXXXXXXXX][+++++++++][ 8 ][ 9][ 6 ][+++++++++][XXXXXXXXX][+++++++++][ 2 ][1 ][ 4 ][+++++++++]
[+++++++++][ 3 ][ 9][ 7 ][ 5 ][ 8 ][+++++++++][ 4 ][1 ][ 3 ][ 2 ][ 8 ]
[+++++++++][1 ][ 2 ][+++++++++][ 4 ][ 6 ][1 ][ 2 ][ 3 ][+++++++++][1 ][ 7 ]
[XXXXXXXXX][+++++++++][ 7 ][1 ][ 2 ][ 4 ][ 3 ][+++++++++][ 5 ][ 7 ][ 8 ][ 9]
[XXXXXXXXX][XXXXXXXXX][+++++++++][ 9][ 3 ][ 7 ][+++++++++][XXXXXXXXX][+++++++++][ 5 ][ 9][XXXXXXXXX]
[XXXXXXXXX][+++++++++][ 3 ][ 7 ][1 ][ 5 ][ 2 ][+++++++++][1 ][ 9][+++++++++][XXXXXXXXX]
[+++++++++][ 8 ][1 ][ 2 ][+++++++++][ 9][ 3 ][1 ][ 2 ][ 8 ][ 7 ][+++++++++]
[+++++++++][ 6 ][ 2 ][+++++++++][XXXXXXXXX][+++++++++][1 ][ 2 ][ 4 ][+++++++++][ 5 ][1 ]
[+++++++++][ 9][ 7 ][ 8 ][+++++++++][ 7 ][ 5 ][ 8 ][+++++++++][ 7 ][ 9][ 3 ]
[XXXXXXXXX][+++++++++][ 5 ][ 6 ][ 7 ][1 ][ 4 ][ 3 ][ 9][ 2 ][ 8 ][XXXXXXXXX]
[XXXXXXXXX][XXXXXXXXX][+++++++++][ 9][ 8 ][ 5 ][+++++++++][ 4 ][ 7 ][ 5 ][+++++++++][XXXXXXXXX]
[XXXXXXXXX][+++++++++][1 ][ 5 ][ 9][ 2 ][ 7 ][ 6 ][ 8 ][ 3 ][ 4 ][+++++++++]
[+++++++++][ 8 ][ 9][ 7 ][+++++++++][ 4 ][ 9][ 5 ][+++++++++][1 ][ 3 ][ 9]
[+++++++++][ 9][ 7 ][+++++++++][ 9][ 6 ][ 8 ][+++++++++][XXXXXXXXX][+++++++++][ 2 ][ 6 ]
[XXXXXXXXX][+++++++++][ 8 ][ 6 ][ 7 ][ 3 ][ 5 ][ 9][+++++++++][ 2 ][1 ][ 8 ]
[XXXXXXXXX][XXXXXXXXX][+++++++++][ 8 ][ 4 ][+++++++++][ 6 ][ 3 ][ 2 ][1 ][ 5 ][XXXXXXXXX]
[XXXXXXXXX][+++++++++][ 3 ][ 7 ][+++++++++][XXXXXXXXX][+++++++++][ 8 ][ 5 ][ 3 ][+++++++++][XXXXXXXXX]
[+++++++++][ 8 ][ 5 ][ 9][ 7 ][+++++++++][1 ][ 5 ][ 3 ][ 4 ][ 2 ][+++++++++]
[+++++++++][ 6 ][ 2 ][+++++++++][ 4 ][ 8 ][ 9][ 6 ][ 7 ][+++++++++][1 ][ 9]
[+++++++++][ 9][ 4 ][ 8 ][1 ][ 2 ][+++++++++][ 7 ][ 4 ][1 ][ 3 ][ 2 ]
[XXXXXXXXX][+++++++++][1 ][ 4 ][ 2 ][XXXXXXXXX][XXXXXXXXX][+++++++++][1 ][ 3 ][ 5 ][XXXXXXXXX]
$
------------------------------------------------------------------------------------