LoginSignup
2
1

More than 5 years have passed since last update.

48時間でSchemeを書こう/構文解析2

Last updated at Posted at 2015-06-30

参考URL

48時間でSchemeを書こう/構文解析

ソース

spaceの除去

入力文字列に含まれた余計なスペースを除去するための関数を作ります。

spaces :: Parser ()
spaces = skipMany1 space

型をみるとParser ()になっているので、
この関数はパース結果は返しません。

space関数は入力文字列の先頭がスペースなら
それをパースする関数です。

> parse space "space_test" " 1"
Right ' '

> parse space "space_test" "1"
Left "space_test" (line 1, column 1):
unexpected "1"
expecting space

skipMany1は引数に渡すパーサ関数がパースに成功する限り
パースを継続し、パース結果は破棄する関数です。

なので

skipMany1 space

と組み合わせると
入力文字列の先頭にある1個以上のスペースを
全て取り除くパース関数になります。

更にこれとsymbolを組み合わせてparse関数に渡すと、

> parse (spaces >> symbol) "test" "    #"
Right '#'

入力文字列の最初の連続した空白を全て取り除き、
その次の文字をsymbolで指定した文字列でパースすることになります。

ただしspacesは1文字以上のスペースを取り除くパース関数なので、
空白が含まれない場合はエラーになります。

> parse (spaces >> symbol) "test" "#"
Left "test" (line 1, column 1):
unexpected "#"
expecting space

48時間でSchemeを書こう/構文解析3

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1