Skip to content

Instantly share code, notes, and snippets.

@mattbierner
Last active December 30, 2015 22:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattbierner/7896721 to your computer and use it in GitHub Desktop.
Save mattbierner/7896721 to your computer and use it in GitHub Desktop.
Example division and regular expression parser
var idToken = letter;
var divToken = character('/');
var regularExpressionToken = binds(
enumeration(
between(character('/'), character('/'),
eager <| many(letter)),
optional('', letter)),
\body, flag ->
always('/' + body +'/' + flag + ')'));
expr = rec <| \expr -> {
var id = idToken;
var regExp = bind(regularExpressionToken,
\r -> always( '(' + r + ')' ));
var primaryExpression = either(regExp, id);
var div = binds(
enumeration(
attempt <| then(
primaryExpression,
divToken),
expr),
\l, r -> always( '(' + l + ' / ' + r + ')' ));
return either(
div,
primaryExpression);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment