This repository has been archived on 2022-05-15. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Kollokvium0307/Вячин Александр

Лексический анализ

Ссылка на видеоразбор

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;;