- ベストアンサー
ANTLR & C++
ANTLR & C++ 現在、C++でOCamlのサブセットのコンパイラを実装しようと試みています。 ANTLRを用いて字句解析・構文解析部分を作成しようとしているのですが、 Ocamlには let f x y = x + y のような構文があり、空白を単純に読み飛ばすことができません。 このように読み飛ばすべき空白と読み飛ばせない空白が混在している場合、 文法定義はどのように書けば良いのでしょうか。 空白を全て明示的に記述すると、文法が非常に冗長になり、困っています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
OCaml に限らずほとんどの言語で「字句の区切りとしての空白」が存在するはずなので (例外はいにしえの FORTRAN とか, くらいか?), 「字句解析のときは字句の区切りとして考慮するけど構文解析部分では無視する」ということくらいはできるんじゃないでしょうか?
お礼
回答ありがとうございます。 Tacosan様のおっしゃる通り、トークンの定義において{$channel = HIDDEN}と指定することで、 そのトークンをパーサに渡さない、ということができるようです。