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/Вячин Александр/README.md

26 lines
1.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лексический анализ
## Ссылка на видеоразбор
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;;