3

私はコンパイラ:原理、技術、およびツールを読んでいますが、これを理解していません:

さらに、フォワードポインタを1位置後退させる必要がある場合(つまり、語彙素に受け入れ状態に到達した記号が含まれていない場合)、その受け入れ状態の近くに*を追加で配置します。この例では、複数の位置だけ前方に後退する必要はありませんが、後退する場合は、任意の数の*を受け入れ状態に付加できます。

それはすべて理にかなっていますが、アスタリスクの重要性がわかりません。この本は正規表現(クリーネ閉包/クロージャー)でそれを使用していましたが、それは他の何かを表すために使用されていますか、それともクリーネ閉包ですか?

4

2 に答える 2

3

いいえ、それはクリーネ閉包ではありません、テキストはそれを説明します、それはその文字が受け入れられた文字の一部ではないので本質的に最後のトークンを戻すと言います。たとえば、単にaを考えた場合<、REで2文字を読み取りますが、実際には2番目の文字を読み取りたくないので、それを元に戻して、後続の読み取りで最初に検出されるようにします。

通常、完全なFSM(有限状態マシン)では、完全な字句構文を処理するため、このような状況にはなりませんが、構文の一部のみを示しているため、このデバイスを使用する必要があります。この例では、「他の」アークは別の状態になります(より多くのアークとして)。

于 2011-12-29T05:45:41.723 に答える
0

撤回部分については->x<yを検討します。ここで、yは私たちが話している「その他」です。「x<y」を読み取った後、yをバッファに戻す必要があります。これは、次の語彙素処理に必要な場合があるためです。この「バッファに戻す」は、撤回と呼ばれます

于 2021-02-24T03:46:57.023 に答える