学校のプロジェクトでは、簡略化された「偽の」プログラミング言語を含むテキスト/ソース ファイルを解析してASTを構築する必要があります。私は を調べましたがboost::spirit
、これはグループ プロジェクトであり、追加のライブラリを学習することに消極的であるように思われるため、講師/TA は C++ で簡単なライブラリを作成することを推奨しました。その道を行こうと思いました。そこにいくつかの例や開始方法に関するアイデアはありますか? 私はいくつかの試みをしていますが、まだ実際には成功していません...
行ごとの解析
- 一連の正規表現 (プロシージャ/関数宣言用に 1 つ)、代入用に 1 つ、while 用に 1 つなどを使用して各行をテストします。
- ただし、1 行に複数のステートメントがないことを前提とする必要があります。
a=b;x=1;
- ただし、1 行に複数のステートメントがないことを前提とする必要があります。
- コンテナステートメント、手順、whiles などに到達したら、
indent
. したがって、ネストされたすべてのステートメントはこの下に置かれます - 到達し
}
たら、インデントを減らします
より良いアイデアや提案はありますか?解析する必要があるサンプルコード (ここでは非常に単純化されています ...)
procedure Hello {
a = 1;
while a {
b = a + 1 + z;
}
}
別のアイデアは、ファイル全体を文字列に読み取り、トップダウンに移動することでした。すべてのプロシージャに一致し、すべてをキャプチャしてから{ ... }
、一致するステートメント (で終わる;
) または containerを開始しwhile { ... }
ます。これは PEG の動作に似ていますか? ただし、ファイル全体を読み取る必要があります