# Лексический анализ ## Ссылка на видеоразбор https://youtu.be/NKhwfK0PurY ## Код из книги type token = Name of string| Num of string | Other of string;; let lex = let several p = many ( some p ) in let lowercase_letter s = " a" <= s & s <= " z " in let uppercase_letter s = "A" <= s & s <= "Z" in let letter s = lowercase_letter s or uppercase_letter s in let alpha s = letter s or s = "_" or s = " ’ " in let digits = " 0" <= s & s <= "9 " in let alphanum s = alpha s or digit s in let spaces = s = "␣ " or s = " \n" or s = "\ t " in let collect (h , t) = h^( it list ( prefix ^) t " " ) in let rawname = some alpha ++ several alphanum >> (Name o collect ) in let rawnumeral = some digit ++ several digit >> (Num o collect) in let raw other = some (K true) >> Other in let token = (rawname | | rawnumeral | | rawother) ++ several space >> fst in let tokens = (several space ++ many token ) >> snd in let all tokens = (tokens ++ finished) >> fst in fst o all token s o explode;;