独自のコンパイラを開発していますが、Java 文法のパニック モードでのエラー回復設計に問題があります。
複数の解決策を考えましたが、本当の問題は次のとおりです。
バイソンC ++でそれを行うにはどうすればよいですか?
私はそれをしました:
パッケージ 2
java.lang.* をインポートします。
エラーは最初のセミコロンまで消費する必要があり、これはルールで正しく実行されます
package_rule: パッケージ エラー ';'
しかし、私がこのコードを書いた場合:
パッケージ 2
java.lang.* をインポート
class y { void method() { int m }
}
エラーを報告するために、標準コンパイラのようなパーサーから必要なもの:
パッケージの行に識別子が必要です。ない ';' 輸入指示行でパッケージの 1 つを報告します。「;」がありません int m 行で。
つまり、パッケージエラーの後に、最初のセミコロンまでトークンを消費するか、最後の行でクラスまたはインターフェイスの宣言を見つけて宣言する前に停止する必要があります。次の行の後に見つかったその他のエラーを報告します。
int m // ';' がありません
私の心の中で複数の解決策を教えてください。