SmaCCメモ(3)

とりあえずC言語関数の関数リストを構文解析するため、学習用にTutorialを参考にして動かしてみたメモ。
まず下記Smalltalk式でSmaCCParserGeneratorを起動する。

SmaCCParserGenerator open

Windowsユーザにはわかりにくいかもしれないが上部の'Scanner','Parser','Compile','Test','Tutorial'はボタンとなっている。

字句解析用に'Scanner'をクリックして、

    :       \s+					;
	:	[a-zA-Z_]+[0-9]* ;			
	:	void					;
	:	int					;
	:	unsigned int					;
	:	\*;

を入力してAccept(Alt-s)する。
次に文法解析用に'Parser'をクリックして

%start			FunctinList;
FunctinList	:	Function+;
Function	:	TypeDec  "(" ParamList ");"	;
TypeDec		:	 |  | 	;
ParamList	:	Param ("," Param)?				;
Param		:	TypeDec ? {Transcript show: 'Param:';show: nodes; show: String cr. };

を入力してAccept(Alt-s)する。

これでコンパイル(Scanner,Parserクラスの生成)の準備ができた。
コンパイルではSmaCCScanner,SmaCCParserから継承するユーザクラス名を入力する。
最後に'Compile LALR'をクリックする。これで上記で入力したクラス作成が完了する。Parserなどの定義が誤っていたりすると,下部のMessages欄に表示される。

次に上記で作成されたクラスをテストするためには,'Test'をクリックする。
例えば今回はC言語の関数宣言を解析するので、次のように入力してAccept(Alt-s)するか下部の'Parse'をクリックする。

void hoge(ABC *a ,int b);
void hoge2(ABC 	 *a ,int b);

エラーがなければ'Parsers without errors'となる。

実行は次のようにするようだ。詳細はまだよくわかってないので、後で調べる。

StdCParser parse: 'void hoge(ABC *a ,int b);
void hoge2(ABC 	 *a ,int b);'

上記入力例は、見様見まねで書いたものなので参考にしないように。ちなみに'SmaCCDev-Examples'カテゴリには'CParser','CScanner'がある。