Memoized CPS parser combinators, monadic version

This commit is contained in:
Dmitry Boulytchev 2020-01-20 07:41:43 +03:00
parent fb9f6f4509
commit f1f3c8aff0
2 changed files with 8 additions and 7 deletions

View file

@ -72,11 +72,12 @@
\renewcommand{\emptyset}{\varnothing}
\newcommand{\dom}[1]{\mathtt{dom}\;{#1}}
\newcommand{\primi}[2]{\mathbf{#1}\;{#2}}
\newcommand{\sial}{S\textit{\lower -.5ex\hbox{I}\kern -.1667em\lower .5ex\hbox {A}}\kern -.125emL\@\xspace}
\newcommand{\lama}{$\lambda\mbox{\textsc{Algol}}$\xspace}
%\newcommand{\sial}{S\textit{\lower -.5ex\hbox{I}\kern -.1667em\lower .5ex\hbox {A}}\kern -.125emL\@\xspace}
\definecolor{light-gray}{gray}{0.90}
\newcommand{\graybox}[1]{\colorbox{light-gray}{#1}}
\lstdefinelanguage{sial}{
\lstdefinelanguage{lama}{
keywords={fun, case, esac, do, od, if, then, else, elif, fi, skip, repeat, until, for, local},
sensitive=true,
%basicstyle=\small,
@ -99,12 +100,12 @@ commentstyle=\scriptsize\rmfamily,
basewidth={0.5em,0.5em},
fontadjust=true,
escapechar=!,
language=sial
language=lama
}
\sloppy
\title{\sial Language Definition}
\title{\lama Language Definition}
\author{Dmitry Boulytchev}

View file

@ -101,7 +101,7 @@ fun seq (a, b) {
--infixr |> after | (a, b) {seq (a, b)}
infixr || before !! (a, b) {alt_k (a, b)}
infixr ||> after || (a, b) {seq_nm (a, b)}
infixr ||> after || (a, b) {seq_k (a, b)}
infix @ at * (a, f) {
fun (k) {
@ -171,8 +171,8 @@ local a = token_k ("a");
local as = memo (
fun (k) {
(empty_k || (as ||> a)) (k)
(empty_k @ fun (x) {""} || as ||> fun(as) {a @ fun (a) {as ++ a}}) $ k
}
);
as (print) ({"a", "a"})
(as ||> fun (as) {eof_k @ lift (as)}) (print) ({"a", "a"})