Skip to content

Instantly share code, notes, and snippets.

@eignnx
Created May 28, 2025 20:58
Show Gist options
  • Select an option

  • Save eignnx/309542434809bd5b251d22fcddebb43b to your computer and use it in GitHub Desktop.

Select an option

Save eignnx/309542434809bd5b251d22fcddebb43b to your computer and use it in GitHub Desktop.
unlimited(Goal) -->
call(Goal),
unlimited(Goal).
main :-
test(`asdf:`),
test(`asdf:asdf:asdf:`),
test(`BAD`),
test(`asdf:asdf:asdf:BAD`),
test(`asdBAD`),
true.
parser -->
{ format('starting parse...~n', []) },
`asdf:`,
{ format('parsed!~n', []) }.
test(Input) :-
format('~nTesting `~s`...~n', [Input]),
open_string(Input, S),
( phrase_from_stream(unlimited(parser), S)
-> format('done.~n', [])
; format('failed!~n', [])
).
/*
?- main.
Testing `asdf:`...
starting parse...
parsed!
starting parse...
failed!
Testing `asdf:asdf:asdf:`...
starting parse...
parsed!
starting parse...
parsed!
starting parse...
parsed!
starting parse...
failed!
Testing `BAD`...
starting parse...
failed!
Testing `asdf:asdf:asdf:BAD`...
starting parse...
parsed!
starting parse...
parsed!
starting parse...
parsed!
starting parse...
failed!
Testing `asdBAD`...
starting parse...
failed!
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment