From 8947dff0102e87981e459c95b3a01d796dff2314 Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Mon, 12 Aug 2019 21:13:11 -0700 Subject: [PATCH] Parse negative numbers. --- thun/gnu-prolog/parser.pl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/thun/gnu-prolog/parser.pl b/thun/gnu-prolog/parser.pl index 4536cce..25142d9 100644 --- a/thun/gnu-prolog/parser.pl +++ b/thun/gnu-prolog/parser.pl @@ -35,7 +35,7 @@ symbol(C) --> chars(Chars), !, {Chars \= "==", atom_codes(C, Chars)}. % TODO: negative numbers, floats, scientific notation. -num(N) --> digits(Codes), !, { number_codes(N, Codes) }. +num(N) --> signed_digits(Codes), !, { number_codes(N, Codes) }. % Groups of characters. @@ -43,6 +43,9 @@ chars(Chars) --> one_or_more(char, Chars). blanks --> blank, !, blanks | []. digits(Digits) --> one_or_more(digit, Digits). +signed_digits([45|Codes]) --> "-", !, digits(Codes). +signed_digits( Codes ) --> digits(Codes). + % Character types. char(Ch) --> [Ch], { nonvar(Ch), Ch =\= 0'[, Ch =\= 0'], between(33, 126, Ch) }.