コメントの埋め込みが許可されている言語を理解するプログラムを作成しようとしています。そのような:
/* Here's a comment
/* This comment is further embedded */ second comment is closed
Must close first comment */
これはコメントとして認識される必要があります (そのため、最初のコメントで停止しません */ 前に 1 つのコメントのみが開かれているのを確認した場合を除きます)。
これは C で修正するのは簡単な問題です。コメントが開いているとインクリメントし、コメントが閉じているとインクリメントするカウンターを単純に持つことができます。カウンターが 0 の場合、「コード セクション」にいます。
ただし、Haskell に状態がない場合は、もう少し難しくなります。
この正確なタイプの解析の状態を追跡できると思われる monadUserState を読みました。ただし、 alex のチュートリアル ページを除いて、読み物はあまり見つかりません。
コンパイルしようとすると、エラーが発生します
templates\wrappers.hs:213:16: Not in scope: `alexEOF`
コードを変更せずに、「基本」ラッパーから「monadUserState」に直接変更したことに注意してください(使用するために何を追加すればよいかわかりません)。これはユーザーコードで初期化する必要があると言われています:
data AlexState = AlexState {
alex_pos :: !AlexPosn, -- position at current input location
alex_inp :: String, -- the current input
alex_chr :: !Char, -- the character before the input
alex_bytes :: [Byte], -- rest of the bytes for the current char
alex_scd :: !Int, -- the current startcode
alex_ust :: AlexUserState -- AlexUserState will be defined in the user program
}
私は少しレキシング初心者で、少なくともコンパイルするためにここに何を追加すればよいかまったくわかりません...その後、物事のロジックについて心配することができます。