lama_byterun/stdlib/regression/test02.lama

60 lines
1.3 KiB
Text
Raw Permalink Normal View History

import Matcher;
var m = initMatcher (" -- asdasdakm ,m.,msd .,m.,asd\n \n\n abc");
var
lident = createRegexp ("[a-z][a-zA-Z_]*", "lowercase identifier"),
uident = createRegexp ("[A-Z][a-zA-Z_]*", "uppercase identifier"),
ws = createRegexp ("\\([ \t\n]\\|--[^\n]*\n\\)*", "whitespace"),
2021-01-31 22:57:12 +03:00
strlit = createRegexp ("""\([^""]\|""""\)*""", "string literal"),
decimal = createRegexp ("[0-9]+", "decimal literal"),
chr = createRegexp ("'[^']'", "character literal");
fun token (s) {
fun (m) {m.matchString (s)}
}
fun lid (m) {
matchRegexp (m, lident)
}
fun uid (m) {
matchRegexp (m, uident)
}
fun const (m) {
matchRegexp (m, decimal)
}
infixl @ before * (p, f) {
fun (m) {
case p (m) of
2020-01-21 22:03:11 +03:00
Succ (x, m) -> Succ (f (x), m)
| err -> err
esac
}
}
infixr |> after !! (l, r) {
fun (m) {
case l (m) of
2020-01-21 22:03:11 +03:00
Succ (s, m) -> r (s) (m)
| err -> err
esac
}
}
infixr || after |> (l, r) {
fun (m) {
case l (m) of
s@Succ (_, _) -> s
| err -> r (m)
esac
}
}
var expr = lid @ fun (s) {Lid (s)} || const @ fun (s) {Dec (s)},
2022-10-25 02:57:51 +03:00
assn = lid |> fun (id) {token (":=") |> fun (s) {expr @ fun (e) {Assn (id, e)}}};
2020-01-21 22:03:11 +03:00
printf ("%s\n", case assn (initMatcher ("x:=3")) of Fail (err) -> err | Succ (s, _) -> s.string esac)