Fixed major bug with parsing

This commit is contained in:
Hugo Sales 2018-12-20 03:03:52 +00:00
parent 90b5c6b3f1
commit 4e37792c0a
1 changed files with 14 additions and 8 deletions

View File

@ -451,6 +451,9 @@ parse_floating_number(op('.', TL, TR)) -->
{ member(X, [point, dot]), ! },
%% Followed by another number
parse_positive_number(TR).
parse_floating_number(TN) -->
%% Or just a number
parse_number(TN).
%% parse_positive_number(-tree, +stream, -not_consumed) is det
%
@ -560,6 +563,11 @@ parse_polynomial_operand(load(T)) -->
%% Tag the variable, to be loaded later
parse_stored_variable(T),
{ ! }.
%% Tests:
%% ?- parse_polynomial_operand(T, [two], NC).
%@ T = 2,
%@ NC = [] ;
%@ false.
%% Declare polynomial_store as a dynamic predicate with two arguments
%% Used to store and retrieve polynomials associated with a variable
@ -618,10 +626,6 @@ parse_polynomial(T) -->
{ ! },
%% Delegate
parse_polynomial_explicit(_-_, T).
parse_polynomial(void, NC, NC) :-
%% If can't parse more, done here
not(parse_polynomial_explicit(_-_, _, NC, _)),
!.
parse_polynomial(T) -->
%% Delegate
parse_polynomial_explicit(_-_, T),
@ -630,9 +634,11 @@ parse_polynomial(T) -->
%% ?- parse_polynomial(T, [], _).
%@ false.
%% ?- parse_polynomial(T, [two], _).
%@ T = 2.
%@ T = 2,
%@ NC = [].
%% ?- parse_polynomial(T, [two, times, three], _).
%@ T = op(*, 2, 3).
%@ T = op(*, 2, 3),
%@ NC = [].
%% ?- parse_polynomial(T, [two, times, three, plus, four], _).
%@ T = op(+, op(*, 2, 3), 4).
%% ?- parse_polynomial(T, [two, plus, three, times, four], _).
@ -680,7 +686,7 @@ parse_polynomial_explicit(TLP-TL, T) -->
%% on the left, through the difference structure,
parse_polynomial_operand(TL),
%% parse either a minus or a plus
member(COp, [-, +]),
{ member(COp, [-, +]) },
parse_operation(COp),
!,
%% Recurse on the right with add; position the sub tree on the right
@ -772,7 +778,7 @@ parse_command(op(-, TN, TP)) -->
[sub],
parse_polynomial(TN),
[X],
{ member(X, [to, with]) },
{ member(X, [to, from, with]) },
parse_polynomial(TP).
parse_command(op(+, TN, TP)) -->
[add],