2017-04-17 13 views
0

私は小さな言語を書いており、私のツールとしてantlrv4を使用しています。 Antlrは、文法ファイル(.g4)をコンパイルするときに、レクサーファイルとパーサファイルを自動生成します。私はjavac btwを使用しています。私は自分の言語にセミコロンがないようにしたい、そして、これをやりたいのは、行内の最後のトークンとして識別子または ")"がある場合、レクサーは自動的にセミコロン( "go"そうです)。どのように私はこのような何かにアプローチするだろうか?私が理解していないレクサーファイルや、レキシングプロセスにどのように関係しているのか、ATN(私は増強された移行ネットワークだと思います)やdfa(私は決定論的な有限オートマトンだと思います)のようなものがあります。どんな助けもありがとうございます。 (私はまだ文法ファイルに取り組んでいるので、完全には完成していません)。ANTLR v4自動生成レクサーを変更しますか?

答えて

0

ここでのいくつかの点:ATNとDFAはパーサーとレクサーの内部構造であり、解析動作を変更するために触れるものではありません。また、レクサーにセミコロンを挿入させたいのは、なぜ私には分かりません。あなたが正確に何をしたいのですか(言わないでください:パーサーでセミコロンをオプションにするには、根本的な理由を意味します)。

あなたは末尾にセミコロンなしでコマンドを受け入れるようにしたい場合は、そのをオプションにすることができます

assignment: simpleAssignment | complexAssignment SEMI?; 

パーサは関係なく、最後のセミコロンがあるか否かをあなたに割り当てルールの内容を提供します。それはあなたが欲しいものですか?

+0

私はセミコロンを望んでいません。なぜなら、主にパーサーのためのものだと思いますから?私は何を提案したかを考え、構文解析の文法ではオプションにしましたが、セミコロンも行や文の終わりを示します。たとえば、私はprint p5abcを持っていて、次の行にprint 10を持っているとします。次の行のprint 10は、最初の行の文字列の一部ではないことをパーサーがどのように知っていますか?すなわち、文字列isnt p5abcprint10?自動的にセミコロンを追加することで、セミコロンの機能を維持しながら、プログラムからの使用を省略できます。私はそれが理にかなったことを願う:( – vaish

関連する問題