From 3f19b2b210f3bc1f729e82242e369d8574f5bb69 Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Tue, 13 Aug 2019 11:24:28 -0700 Subject: [PATCH] Parse floating point numbers. --- thun/gnu-prolog/parser.pl | 7 ++++++- thun/gnu-prolog/thun.pl | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/thun/gnu-prolog/parser.pl b/thun/gnu-prolog/parser.pl index 6bab69d..90fe216 100644 --- a/thun/gnu-prolog/parser.pl +++ b/thun/gnu-prolog/parser.pl @@ -34,9 +34,14 @@ joy_term(C) --> symbol(C). symbol(C) --> chars(Chars), !, { Chars \= "==", atom_codes(C, Chars) }. -num(N) --> signed_digits(Codes), !, end_num, { number_codes(N, Codes) }. +num(N) --> number_digits(Codes), { number_codes(N, Codes) }. + +number_digits(Codes) --> signed_float_or_integer(Codes), !, end_num. % TODO: floats, scientific notation. +signed_float_or_integer(Codes) --> signed_digits(J), ".", !, digits(I), + { append(J, [0'.|I], Codes) }. + signed_digits([45|Codes]) --> "-", !, digits(Codes). signed_digits( Codes ) --> digits(Codes). diff --git a/thun/gnu-prolog/thun.pl b/thun/gnu-prolog/thun.pl index 3dcb8a9..88ef875 100644 --- a/thun/gnu-prolog/thun.pl +++ b/thun/gnu-prolog/thun.pl @@ -123,7 +123,6 @@ combo(i, [P|S], S, Ei, Eo) :- append(P, Ei, Eo). combo(dip, [P, X|S], S, Ei, Eo) :- append(P, [X|Ei], Eo). combo(dipd, [P, X, Y|S], S, Ei, Eo) :- append(P, [Y, X|Ei], Eo). -combo(dupdip, [P, X|S], [X|S], Ei, Eo) :- append(P, [X|Ei], Eo). combo(dupdip, [P, X|S], [X|S], Ei, Eo) :- append(P, [X|Ei], Eo). combo(branch, [T, _, true|S], S, Ei, Eo) :- append(T, Ei, Eo).