2

ここで提示された例をお借りしました

http://www.haskell.org/alex/doc/html/introduction.html

数式のインタプリタを作ろうとしています。(リテラルのみ、変数なし) そして、改行で 2 つの異なる式を分離したいと考えています。残念ながら、私がこれを行うとき

$ignoredWhite = [\t\f\v\r] -- 空白を無視

$newline = "\n" --改行

Alex (v 2.2) はコンパイルを中止します。私が試してみました

$newline = \n --改行

しかし、それは、入力を読み取っているときに、アボートが alex から最終バイナリ (別名 ghc によって生成されたもの) に移動するだけです。

これを修正するにはどうすればよいですか?

4

2 に答える 2

3

この質問は非常に古いものですが、今後の訪問者のために回答を投稿します。トークンが定義されたら、alex にすべての空白を処理するように指示します。

tokens :-
  $white {\p s -> checkWhite p $ head s} 

checkWhite次のようになります。

checkWhite :: AlexPosn -> Char -> Token
checkWhite p '\n' = TNewLine p
checkWhite p _ = TEmpty

ご覧のとおり、改行が検出されると特別なトークンが出力されます。出力から削除するTEmptyには、 を使用できます... filter (\= TEmpty) $ alexScanTokens ...

于 2012-12-27T14:25:42.130 に答える
2

推測ですが、文字範囲に含めてみましたか?

$newline = [\n]
于 2010-07-24T15:23:08.620 に答える