Lexer
今日はHaskellでレクサーを書こうと思い立つ。
Parsecの勉強をしようしようと思いつつ、なかなかまとまったサイトがないので、本腰入れないといけなさそう
なら、自作で何かしらやってみるか
というわけで。
基本となる関数は、
parse :: String -> Char -> String -> [String] parse n c (s:str) | s == c = [n] | otherwise = parse n c str
である。
例えば、
if(x < 9)
のような文を字句に解析するには、
まず
(
までの命令を読み出し、次に
)
までの中身について、記号と数字、文字列を分割していく。
最終的には、[Stirng]に、
["if" , "x" , "<" , "9"]
のような形で展開される。
こいつはレクサーなので、あとはこれを、パーサを使って意味のある構造に構成していく。
という流れを考え、
上の関数の一行目を
s == c = [n]:parse' [] "(" str
のように記述し、
字句解析を連鎖的につなげていくことができる。