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'がある。