Improve diagnostics for malformed number literals.

library/mercury_term_lexer.m:
    Make the diagnostics for malformed numbers more detailed, and thus
    more easily understandable.

tests/hard_coded/parse_number_from_string.exp:
tests/invalid_nodepend/invalid_binary_literal.err_exp:
tests/invalid_nodepend/invalid_decimal_literal.err_exp:
tests/invalid_nodepend/invalid_float_literal.err_exp:
tests/invalid_nodepend/invalid_hex_literal.err_exp:
tests/invalid_nodepend/invalid_octal_literal.err_exp:
    Update the expected error messages.
This commit is contained in:
Zoltan Somogyi
2023-06-19 01:10:19 +02:00
parent 9a699b3d12
commit ac57c2f70d
7 changed files with 194 additions and 124 deletions

View File

@@ -3329,7 +3329,7 @@ get_binary(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated binary literal")
Token = report_zero_base_no_digits(base_2)
;
Result = ok,
( if char.is_binary_digit(Char) then
@@ -3339,7 +3339,7 @@ get_binary(Stream, Token, !IO) :-
get_binary(Stream, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated binary literal")
Token = report_zero_base_no_digits(base_2)
)
).
@@ -3357,11 +3357,11 @@ string_get_binary(String, Len, Posn0, Token, Context, !Posn) :-
string_get_binary(String, Len, LastPosn, Token, Context, !Posn)
else
!:Posn = LastPosn,
Token = error("unterminated binary literal"),
Token = report_zero_base_no_digits(base_2),
string_get_context(Posn0, Context)
)
else
Token = error("unterminated binary literal"),
Token = report_zero_base_no_digits(base_2),
string_get_context(Posn0, Context)
).
@@ -3385,11 +3385,11 @@ linestr_get_binary(String, Len, LineContext0, Token, Context,
else
!:LineContext = LastLineContext,
!:LinePosn = LastLinePosn,
Token = error("unterminated binary literal"),
Token = report_zero_base_no_digits(base_2),
linestr_get_context(LineContext0, Context)
)
else
Token = error("unterminated binary literal"),
Token = report_zero_base_no_digits(base_2),
linestr_get_context(LineContext0, Context)
).
@@ -3409,7 +3409,7 @@ get_binary_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary literal")
Token = report_int_ends_in_underscore(base_2)
)
;
Result = ok,
@@ -3434,7 +3434,7 @@ get_binary_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary literal")
Token = report_int_ends_in_underscore(base_2)
)
)
).
@@ -3481,7 +3481,7 @@ string_get_binary_2(String, Len, !.LastDigit, Posn1, Token, Context, !Posn) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary literal")
Token = report_int_ends_in_underscore(base_2)
),
string_get_context(Posn1, Context)
)
@@ -3493,7 +3493,7 @@ string_get_binary_2(String, Len, !.LastDigit, Posn1, Token, Context, !Posn) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary literal")
Token = report_int_ends_in_underscore(base_2)
),
string_get_context(Posn1, Context)
).
@@ -3549,7 +3549,7 @@ linestr_get_binary_2(String, Len, !.LastDigit, LineContext1, LinePosn1,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary literal")
Token = report_int_ends_in_underscore(base_2)
),
linestr_get_context(LineContext1, Context)
)
@@ -3561,7 +3561,7 @@ linestr_get_binary_2(String, Len, !.LastDigit, LineContext1, LinePosn1,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary literal")
Token = report_int_ends_in_underscore(base_2)
),
linestr_get_context(LineContext1, Context)
).
@@ -3575,7 +3575,7 @@ get_octal(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated octal literal")
Token = report_zero_base_no_digits(base_8)
;
Result = ok,
( if char.is_octal_digit(Char) then
@@ -3585,7 +3585,7 @@ get_octal(Stream, Token, !IO) :-
get_octal(Stream, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated octal literal")
Token = report_zero_base_no_digits(base_8)
)
).
@@ -3605,11 +3605,11 @@ string_get_octal(String, Len, Posn0, Token, Context, !Posn) :-
)
else
!:Posn = LastPosn,
Token = error("unterminated octal literal"),
Token = report_zero_base_no_digits(base_8),
string_get_context(Posn0, Context)
)
else
Token = error("unterminated octal literal"),
Token = report_zero_base_no_digits(base_8),
string_get_context(Posn0, Context)
).
@@ -3635,11 +3635,11 @@ linestr_get_octal(String, Len, LineContext0, LinePosn0, Token, Context,
else
!:LineContext = LastLineContext,
!:LinePosn = LastLinePosn,
Token = error("unterminated octal literal"),
Token = report_zero_base_no_digits(base_8),
linestr_get_context(LineContext0, Context)
)
else
Token = error("unterminated octal literal"),
Token = report_zero_base_no_digits(base_8),
linestr_get_context(LineContext0, Context)
).
@@ -3659,7 +3659,7 @@ get_octal_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal literal")
Token = report_int_ends_in_underscore(base_8)
)
;
Result = ok,
@@ -3684,7 +3684,7 @@ get_octal_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal literal")
Token = report_int_ends_in_underscore(base_8)
)
)
).
@@ -3720,12 +3720,12 @@ string_get_octal_2(String, Len, !.LastDigit, Posn1, Token, Context, !Posn) :-
!:Posn = LastDigitPosn,
(
!.LastDigit = last_digit_is_not_underscore,
grab_string(String, Posn1, !.Posn, BinaryString),
conv_string_to_int(BinaryString, base_8, signed, size_word,
grab_string(String, Posn1, !.Posn, OctalString),
conv_string_to_int(OctalString, base_8, signed, size_word,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal literal")
Token = report_int_ends_in_underscore(base_8)
),
string_get_context(Posn1, Context)
)
@@ -3736,7 +3736,7 @@ string_get_octal_2(String, Len, !.LastDigit, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_8, signed, size_word, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal literal")
Token = report_int_ends_in_underscore(base_8)
),
string_get_context(Posn1, Context)
).
@@ -3781,23 +3781,23 @@ linestr_get_octal_2(String, Len, !.LastDigit, LineContext1, LinePosn1,
(
!.LastDigit = last_digit_is_not_underscore,
linestr_grab_string(String, LinePosn1, !.LinePosn,
BinaryString),
conv_string_to_int(BinaryString, base_8, signed, size_word,
OctalString),
conv_string_to_int(OctalString, base_8, signed, size_word,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal literal")
Token = report_int_ends_in_underscore(base_8)
),
linestr_get_context(LineContext1, Context)
)
else
(
!.LastDigit = last_digit_is_not_underscore,
linestr_grab_string(String, LinePosn1, !.LinePosn, BinaryString),
conv_string_to_int(BinaryString, base_8, signed, size_word, Token)
linestr_grab_string(String, LinePosn1, !.LinePosn, OctalString),
conv_string_to_int(OctalString, base_8, signed, size_word, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal literal")
Token = report_int_ends_in_underscore(base_8)
),
linestr_get_context(LineContext1, Context)
).
@@ -3811,7 +3811,7 @@ get_hex(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated hexadecimal literal")
Token = report_zero_base_no_digits(base_16)
;
Result = ok,
( if char.is_hex_digit(Char) then
@@ -3821,7 +3821,7 @@ get_hex(Stream, Token, !IO) :-
get_hex(Stream, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated hexadecimal literal")
Token = report_zero_base_no_digits(base_16)
)
).
@@ -3843,11 +3843,11 @@ string_get_hex(String, Len, Posn0, Token, Context, !Posn) :-
)
else
!:Posn = LastPosn,
Token = error("unterminated hexadecimal literal"),
Token = report_zero_base_no_digits(base_16),
string_get_context(Posn0, Context)
)
else
Token = error("unterminated hexadecimal literal"),
Token = report_zero_base_no_digits(base_16),
string_get_context(Posn0, Context)
).
@@ -3875,11 +3875,11 @@ linestr_get_hex(String, Len, LineContext0, LinePosn0, Token, Context,
else
!:LineContext = LastLineContext,
!:LinePosn = LastLinePosn,
Token = error("unterminated hexadecimal literal"),
Token = report_zero_base_no_digits(base_16),
linestr_get_context(LineContext0, Context)
)
else
Token = error("unterminated hexadecimal literal"),
Token = report_zero_base_no_digits(base_16),
linestr_get_context(LineContext0, Context)
).
@@ -3899,7 +3899,7 @@ get_hex_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hexadecimal literal")
Token = report_int_ends_in_underscore(base_16)
)
;
Result = ok,
@@ -3926,7 +3926,7 @@ get_hex_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hexadecimal literal")
Token = report_int_ends_in_underscore(base_16)
)
)
).
@@ -3962,24 +3962,23 @@ string_get_hex_2(String, Len, !.LastDigit, Posn1, Token, Context, !Posn) :-
!:Posn = LastDigitPosn,
(
!.LastDigit = last_digit_is_not_underscore,
grab_string(String, Posn1, !.Posn, BinaryString),
conv_string_to_int(BinaryString, base_16, signed, size_word,
grab_string(String, Posn1, !.Posn, HexString),
conv_string_to_int(HexString, base_16, signed, size_word,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hexadecimal literal")
Token = report_int_ends_in_underscore(base_16)
),
string_get_context(Posn1, Context)
)
else
(
!.LastDigit = last_digit_is_not_underscore,
grab_string(String, Posn1, !.Posn, BinaryString),
conv_string_to_int(BinaryString, base_16, signed, size_word,
Token)
grab_string(String, Posn1, !.Posn, HexString),
conv_string_to_int(HexString, base_16, signed, size_word, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hexadecimal literal")
Token = report_int_ends_in_underscore(base_16)
),
string_get_context(Posn1, Context)
).
@@ -4024,24 +4023,23 @@ linestr_get_hex_2(String, Len, !.LastDigit, LineContext1, LinePosn1,
(
!.LastDigit = last_digit_is_not_underscore,
linestr_grab_string(String, LinePosn1, !.LinePosn,
BinaryString),
conv_string_to_int(BinaryString, base_16, signed, size_word,
HexString),
conv_string_to_int(HexString, base_16, signed, size_word,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hexadecimal literal")
Token = report_int_ends_in_underscore(base_16)
),
linestr_get_context(LineContext1, Context)
)
else
(
!.LastDigit = last_digit_is_not_underscore,
linestr_grab_string(String, LinePosn1, !.LinePosn, BinaryString),
conv_string_to_int(BinaryString, base_16, signed, size_word,
Token)
linestr_grab_string(String, LinePosn1, !.LinePosn, HexString),
conv_string_to_int(HexString, base_16, signed, size_word, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hexadecimal literal")
Token = report_int_ends_in_underscore(base_16)
),
linestr_get_context(LineContext1, Context)
).
@@ -4062,7 +4060,7 @@ get_number(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_int_ends_in_underscore(base_10)
)
;
Result = ok,
@@ -4079,7 +4077,7 @@ get_number(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
get_int_dot(Stream, !.LastDigit, !.RevChars, Token, !IO)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_underscore_before_decimal_point
)
else if Char = 'u' then
get_integer_size_suffix(Stream, !.RevChars, base_10, unsigned,
@@ -4094,7 +4092,7 @@ get_number(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
get_float_exponent(Stream, !.RevChars, Token, !IO)
;
!.LastDigit = last_digit_is_underscore,
Token = error("underscore before exponent")
Token = report_underscore_before_exponent
)
else
io.putback_char(Stream, Char, !IO),
@@ -4104,7 +4102,7 @@ get_number(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_int_ends_in_underscore(base_10)
)
)
).
@@ -4141,7 +4139,7 @@ string_get_number(String, Len, !.LastDigit, Posn0, Token, Context, !Posn) :-
LastPosn, TokenPrime, ContextPrime, !Posn)
;
!.LastDigit = last_digit_is_underscore,
TokenPrime = error("unterminated decimal literal"),
TokenPrime = report_underscore_before_decimal_point,
string_get_context(Posn0, ContextPrime)
)
;
@@ -4164,7 +4162,7 @@ string_get_number(String, Len, !.LastDigit, Posn0, Token, Context, !Posn) :-
TokenPrime, ContextPrime, !Posn)
;
!.LastDigit = last_digit_is_underscore,
TokenPrime = error("underscore before exponent"),
TokenPrime = report_underscore_before_exponent,
string_get_context(Posn0, ContextPrime)
)
)
@@ -4180,7 +4178,7 @@ string_get_number(String, Len, !.LastDigit, Posn0, Token, Context, !Posn) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_int_ends_in_underscore(base_10)
),
string_get_context(Posn0, Context)
)
@@ -4192,7 +4190,7 @@ string_get_number(String, Len, !.LastDigit, Posn0, Token, Context, !Posn) :-
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_int_ends_in_underscore(base_10)
),
string_get_context(Posn0, Context)
).
@@ -4235,7 +4233,7 @@ linestr_get_number(String, Len, !.LastDigit, LineContext0, LinePosn0,
TokenPrime, ContextPrime, !LineContext, !LinePosn)
;
!.LastDigit = last_digit_is_underscore,
TokenPrime = error("unterminated decimal literal"),
TokenPrime = report_underscore_before_decimal_point,
linestr_get_context(LineContext0, ContextPrime)
)
;
@@ -4261,7 +4259,7 @@ linestr_get_number(String, Len, !.LastDigit, LineContext0, LinePosn0,
TokenPrime, ContextPrime, !LineContext, !LinePosn)
;
!.LastDigit = last_digit_is_underscore,
TokenPrime = error("underscore before exponent"),
TokenPrime = report_underscore_before_exponent,
linestr_get_context(LineContext0, ContextPrime)
)
)
@@ -4279,7 +4277,7 @@ linestr_get_number(String, Len, !.LastDigit, LineContext0, LinePosn0,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_int_ends_in_underscore(base_10)
),
linestr_get_context(LineContext0, Context)
)
@@ -4291,7 +4289,7 @@ linestr_get_number(String, Len, !.LastDigit, LineContext0, LinePosn0,
Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal literal")
Token = report_int_ends_in_underscore(base_10)
),
linestr_get_context(LineContext0, Context)
).
@@ -5029,7 +5027,7 @@ linestr_get_float_exponent_3(String, Len, !.LastDigit, LineContext0, LinePosn0,
conv_to_float(FloatString, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated exponent in float literal")
Token = report_exponent_ends_in_underscore
),
linestr_get_context(LineContext0, Context)
)
@@ -5040,7 +5038,7 @@ linestr_get_float_exponent_3(String, Len, !.LastDigit, LineContext0, LinePosn0,
conv_to_float(FloatString, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated exponent in float literal")
Token = report_exponent_ends_in_underscore
),
linestr_get_context(LineContext0, Context)
).
@@ -5107,6 +5105,46 @@ rev_char_list_to_string(RevChars, String) :-
null_character_error =
error("null character is illegal in strings and names").
:- func report_zero_base_no_digits(integer_base) = token.
report_zero_base_no_digits(base_2) =
error("0b is not followed by binary digits").
report_zero_base_no_digits(base_8) =
error("0o is not followed by octal digits").
report_zero_base_no_digits(base_10) = _ :-
% Decimal integers have no prefix.
unexpected($pred, "base 10").
report_zero_base_no_digits(base_16) =
error("0x is not followed by hexadecimal digits").
:- func report_int_ends_in_underscore(integer_base) = token.
report_int_ends_in_underscore(base_2) =
error("a binary literal cannot end with an underscore").
report_int_ends_in_underscore(base_8) =
error("an octal literal cannot end with an underscore").
report_int_ends_in_underscore(base_10) =
error("a decimal literal cannot end with an underscore").
report_int_ends_in_underscore(base_16) =
error("a hexadecimal literal cannot end with an underscore").
:- func report_exponent_ends_in_underscore = token.
report_exponent_ends_in_underscore =
error("the exponent cannot end with an underscore").
:- func report_underscore_before_decimal_point = token.
report_underscore_before_decimal_point =
error("an underscore should separate two digits; " ++
"it should not appear just before a decimal point").
:- func report_underscore_before_exponent = token.
report_underscore_before_exponent =
error("an underscore should separate two digits; " ++
"it should not appear just before an exponent").
%---------------------------------------------------------------------------%
token_to_string(Token, String) :-

View File

@@ -13,8 +13,8 @@ read_term("1_000_000_000_000_000_000_000.") = functor(integer(base_10, i(5, [138
read_term("-1_000_000_000_000_000_000_000.") = functor(integer(base_10, i(-5, [-13877, -12907, -7261, -14976, 0]), signed, size_word), [], context("", 1))
Invalid decimal literals:
read_term("123_.") = Syntax error: unterminated decimal literal
read_term("-123_.") = Syntax error: unterminated decimal literal
read_term("123_.") = Syntax error: an underscore should separate two digits; it should not appear just before a decimal point
read_term("-123_.") = Syntax error: an underscore should separate two digits; it should not appear just before a decimal point
read_term("-_123") = Syntax error: operator or `.' expected
Valid binary literals:
@@ -26,12 +26,12 @@ read_term("0b_1000_100.") = functor(integer(base_2, i(1, [68]), signed, size_wor
read_term("-0b_1000_100.") = functor(integer(base_2, i(-1, [-68]), signed, size_word), [], context("", 1))
Invalid binary literals:
read_term("0b.") = Syntax error: unterminated binary literal
read_term("-0b.") = Syntax error: unterminated binary literal
read_term("0b_.") = Syntax error: unterminated binary literal
read_term("-0b_.") = Syntax error: unterminated binary literal
read_term("0b11_.") = Syntax error: unterminated binary literal
read_term("-0b11_.") = Syntax error: unterminated binary literal
read_term("0b.") = Syntax error: 0b is not followed by binary digits
read_term("-0b.") = Syntax error: 0b is not followed by binary digits
read_term("0b_.") = Syntax error: 0b is not followed by binary digits
read_term("-0b_.") = Syntax error: 0b is not followed by binary digits
read_term("0b11_.") = Syntax error: a binary literal cannot end with an underscore
read_term("-0b11_.") = Syntax error: a binary literal cannot end with an underscore
Valid octal literals:
read_term("0o77.") = functor(integer(base_8, i(1, [63]), signed, size_word), [], context("", 1))
@@ -44,12 +44,12 @@ read_term("0o_7__7___7.") = functor(integer(base_8, i(1, [511]), signed, size_wo
read_term("-0o_7__7___7.") = functor(integer(base_8, i(-1, [-511]), signed, size_word), [], context("", 1))
Invalid octal literals:
read_term("0o.") = Syntax error: unterminated octal literal
read_term("-0o") = Syntax error: unterminated octal literal
read_term("0o_.") = Syntax error: unterminated octal literal
read_term("-0o_.") = Syntax error: unterminated octal literal
read_term("0o77_.") = Syntax error: unterminated octal literal
read_term("-0o77_.") = Syntax error: unterminated octal literal
read_term("0o.") = Syntax error: 0o is not followed by octal digits
read_term("-0o") = Syntax error: 0o is not followed by octal digits
read_term("0o_.") = Syntax error: 0o is not followed by octal digits
read_term("-0o_.") = Syntax error: 0o is not followed by octal digits
read_term("0o77_.") = Syntax error: an octal literal cannot end with an underscore
read_term("-0o77_.") = Syntax error: an octal literal cannot end with an underscore
Valid hexadecimal literals:
read_term("0xff.") = functor(integer(base_16, i(1, [255]), signed, size_word), [], context("", 1))
@@ -64,12 +64,12 @@ read_term("0xfffffffffffffffffffffffff.") = functor(integer(base_16, i(8, [3, 16
read_term("-0xfffffffffffffffffffffffff.") = functor(integer(base_16, i(-8, [-3, -16383, -16383, -16383, -16383, -16383, -16383, -16383]), signed, size_word), [], context("", 1))
Invalid hexadecimal literals:
read_term("0x.") = Syntax error: unterminated hexadecimal literal
read_term("-0x.") = Syntax error: unterminated hexadecimal literal
read_term("0x_.") = Syntax error: unterminated hexadecimal literal
read_term("-0x_.") = Syntax error: unterminated hexadecimal literal
read_term("0xff_.") = Syntax error: unterminated hexadecimal literal
read_term("-0xff_.") = Syntax error: unterminated hexadecimal literal
read_term("0x.") = Syntax error: 0x is not followed by hexadecimal digits
read_term("-0x.") = Syntax error: 0x is not followed by hexadecimal digits
read_term("0x_.") = Syntax error: 0x is not followed by hexadecimal digits
read_term("-0x_.") = Syntax error: 0x is not followed by hexadecimal digits
read_term("0xff_.") = Syntax error: a hexadecimal literal cannot end with an underscore
read_term("-0xff_.") = Syntax error: a hexadecimal literal cannot end with an underscore
Valid float literals:
read_term("0.123.") = functor(float(0.123), [], context("", 1))
@@ -96,17 +96,17 @@ read_term("0_1.0.") = functor(float(1.0), [], context("", 1))
Invalid float literals:
read_term("1_2_3.1_2_3_.") = Syntax error: fractional part of float terminated by underscore
read_term("1_2_3e1_2_3_.") = Syntax error: unterminated exponent in float literal
read_term("123_._123.") = Syntax error: unterminated decimal literal
read_term("123_._123.") = Syntax error: an underscore should separate two digits; it should not appear just before a decimal point
read_term("123._123.") = Syntax error: underscore following decimal point
read_term("123_.123.") = Syntax error: unterminated decimal literal
read_term("123_e12.") = Syntax error: underscore before exponent
read_term("123_E12.") = Syntax error: underscore before exponent
read_term("123_.123.") = Syntax error: an underscore should separate two digits; it should not appear just before a decimal point
read_term("123_e12.") = Syntax error: an underscore should separate two digits; it should not appear just before an exponent
read_term("123_E12.") = Syntax error: an underscore should separate two digits; it should not appear just before an exponent
read_term("123e_12.") = Syntax error: unterminated exponent in float literal
read_term("123E_12.") = Syntax error: unterminated exponent in float literal
read_term("123e12_.") = Syntax error: unterminated exponent in float literal
read_term("123E12_.") = Syntax error: unterminated exponent in float literal
read_term("12_e11.") = Syntax error: underscore before exponent
read_term("12_E11.") = Syntax error: underscore before exponent
read_term("12_e11.") = Syntax error: an underscore should separate two digits; it should not appear just before an exponent
read_term("12_E11.") = Syntax error: an underscore should separate two digits; it should not appear just before an exponent
read_term("123.12e-_12.") = Syntax error: unterminated exponent in float literal
read_term("123.12e+_12.") = Syntax error: unterminated exponent in float literal
read_term("123.12e12_.") = Syntax error: unterminated exponent in float literal

View File

@@ -8,24 +8,32 @@ invalid_binary_literal.m:018: Error: no clauses for function `foo7'/0.
invalid_binary_literal.m:019: Error: no clauses for function `foo8'/0.
invalid_binary_literal.m:023: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:023: start of (sub)term.
invalid_binary_literal.m:023: Syntax error: unterminated binary literal.
invalid_binary_literal.m:023: Syntax error: 0b is not followed by binary
invalid_binary_literal.m:023: digits.
invalid_binary_literal.m:025: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:025: start of (sub)term.
invalid_binary_literal.m:025: Syntax error: unterminated binary literal.
invalid_binary_literal.m:025: Syntax error: 0b is not followed by binary
invalid_binary_literal.m:025: digits.
invalid_binary_literal.m:027: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:027: start of (sub)term.
invalid_binary_literal.m:027: Syntax error: unterminated binary literal.
invalid_binary_literal.m:027: Syntax error: 0b is not followed by binary
invalid_binary_literal.m:027: digits.
invalid_binary_literal.m:029: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:029: start of (sub)term.
invalid_binary_literal.m:029: Syntax error: unterminated binary literal.
invalid_binary_literal.m:029: Syntax error: 0b is not followed by binary
invalid_binary_literal.m:029: digits.
invalid_binary_literal.m:031: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:031: start of (sub)term.
invalid_binary_literal.m:031: Syntax error: unterminated binary literal.
invalid_binary_literal.m:031: Syntax error: a binary literal cannot end with an
invalid_binary_literal.m:031: underscore.
invalid_binary_literal.m:033: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:033: start of (sub)term.
invalid_binary_literal.m:033: Syntax error: unterminated binary literal.
invalid_binary_literal.m:033: Syntax error: a binary literal cannot end with an
invalid_binary_literal.m:033: underscore.
invalid_binary_literal.m:035: Error: clause for predicate `b11'/0
invalid_binary_literal.m:035: without corresponding `:- pred' declaration.
invalid_binary_literal.m:035: Inferred :- pred b11.
invalid_binary_literal.m:035: Syntax error: unterminated decimal literal.
invalid_binary_literal.m:037: Syntax error: unterminated decimal literal.
invalid_binary_literal.m:035: Syntax error: a decimal literal cannot end with
invalid_binary_literal.m:035: an underscore.
invalid_binary_literal.m:037: Syntax error: a decimal literal cannot end with
invalid_binary_literal.m:037: an underscore.

View File

@@ -1,4 +1,8 @@
invalid_decimal_literal.m:012: Error: no clauses for function `foo1'/0.
invalid_decimal_literal.m:013: Error: no clauses for function `foo2'/0.
invalid_decimal_literal.m:017: Syntax error: unterminated decimal literal.
invalid_decimal_literal.m:019: Syntax error: unterminated decimal literal.
invalid_decimal_literal.m:017: Syntax error: an underscore should separate two
invalid_decimal_literal.m:017: digits; it should not appear just before a
invalid_decimal_literal.m:017: decimal point.
invalid_decimal_literal.m:019: Syntax error: an underscore should separate two
invalid_decimal_literal.m:019: digits; it should not appear just before a
invalid_decimal_literal.m:019: decimal point.

View File

@@ -16,24 +16,30 @@ invalid_float_literal.m:027: Syntax error: fractional part of float terminated
invalid_float_literal.m:027: by underscore.
invalid_float_literal.m:029: Syntax error at token `. ': unexpected token at
invalid_float_literal.m:029: start of (sub)term.
invalid_float_literal.m:029: Syntax error: unterminated exponent in float
invalid_float_literal.m:029: literal.
invalid_float_literal.m:029: Syntax error: the exponent cannot end with an
invalid_float_literal.m:029: underscore.
invalid_float_literal.m:031: In clause head:
invalid_float_literal.m:031: error: expected a symbol name, got `12'.
invalid_float_literal.m:031: Syntax error: underscore before exponent.
invalid_float_literal.m:031: Syntax error: an underscore should separate two
invalid_float_literal.m:031: digits; it should not appear just before an
invalid_float_literal.m:031: exponent.
invalid_float_literal.m:033: In clause head:
invalid_float_literal.m:033: error: expected a symbol name, got `_12'.
invalid_float_literal.m:033: Syntax error: unterminated exponent in float
invalid_float_literal.m:033: literal.
invalid_float_literal.m:035: In clause head:
invalid_float_literal.m:035: error: expected a symbol name, got `_123'.
invalid_float_literal.m:035: Syntax error: unterminated decimal literal.
invalid_float_literal.m:035: Syntax error: an underscore should separate two
invalid_float_literal.m:035: digits; it should not appear just before a
invalid_float_literal.m:035: decimal point.
invalid_float_literal.m:037: In clause head:
invalid_float_literal.m:037: error: expected a symbol name, got `123'.
invalid_float_literal.m:037: Syntax error: underscore following decimal point.
invalid_float_literal.m:039: In clause head:
invalid_float_literal.m:039: error: expected a symbol name, got `123'.
invalid_float_literal.m:039: Syntax error: unterminated decimal literal.
invalid_float_literal.m:039: Syntax error: an underscore should separate two
invalid_float_literal.m:039: digits; it should not appear just before a
invalid_float_literal.m:039: decimal point.
invalid_float_literal.m:041: Error: clause for predicate `-'/2
invalid_float_literal.m:041: without corresponding `:- pred' declaration.
invalid_float_literal.m:041: Inferred :- pred -(T1, int).
@@ -46,7 +52,9 @@ invalid_float_literal.m:043: Syntax error: unterminated exponent in float
invalid_float_literal.m:043: literal.
invalid_float_literal.m:045: In clause head:
invalid_float_literal.m:045: error: expected a symbol name, got `12'.
invalid_float_literal.m:045: Syntax error: underscore before exponent.
invalid_float_literal.m:045: Syntax error: an underscore should separate two
invalid_float_literal.m:045: digits; it should not appear just before an
invalid_float_literal.m:045: exponent.
invalid_float_literal.m:047: In clause head:
invalid_float_literal.m:047: error: expected a symbol name, got `_12'.
invalid_float_literal.m:047: Syntax error: unterminated exponent in float

View File

@@ -8,24 +8,32 @@ invalid_hex_literal.m:018: Error: no clauses for function `foo7'/0.
invalid_hex_literal.m:019: Error: no clauses for function `foo8'/0.
invalid_hex_literal.m:023: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:023: start of (sub)term.
invalid_hex_literal.m:023: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:023: Syntax error: 0x is not followed by hexadecimal
invalid_hex_literal.m:023: digits.
invalid_hex_literal.m:025: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:025: start of (sub)term.
invalid_hex_literal.m:025: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:025: Syntax error: 0x is not followed by hexadecimal
invalid_hex_literal.m:025: digits.
invalid_hex_literal.m:027: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:027: start of (sub)term.
invalid_hex_literal.m:027: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:027: Syntax error: 0x is not followed by hexadecimal
invalid_hex_literal.m:027: digits.
invalid_hex_literal.m:029: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:029: start of (sub)term.
invalid_hex_literal.m:029: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:029: Syntax error: 0x is not followed by hexadecimal
invalid_hex_literal.m:029: digits.
invalid_hex_literal.m:031: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:031: start of (sub)term.
invalid_hex_literal.m:031: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:031: Syntax error: a hexadecimal literal cannot end with
invalid_hex_literal.m:031: an underscore.
invalid_hex_literal.m:033: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:033: start of (sub)term.
invalid_hex_literal.m:033: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:033: Syntax error: a hexadecimal literal cannot end with
invalid_hex_literal.m:033: an underscore.
invalid_hex_literal.m:035: Error: clause for predicate `xff'/0
invalid_hex_literal.m:035: without corresponding `:- pred' declaration.
invalid_hex_literal.m:035: Inferred :- pred xff.
invalid_hex_literal.m:035: Syntax error: unterminated decimal literal.
invalid_hex_literal.m:037: Syntax error: unterminated decimal literal.
invalid_hex_literal.m:035: Syntax error: a decimal literal cannot end with an
invalid_hex_literal.m:035: underscore.
invalid_hex_literal.m:037: Syntax error: a decimal literal cannot end with an
invalid_hex_literal.m:037: underscore.

View File

@@ -8,24 +8,28 @@ invalid_octal_literal.m:018: Error: no clauses for function `foo7'/0.
invalid_octal_literal.m:019: Error: no clauses for function `foo8'/0.
invalid_octal_literal.m:023: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:023: start of (sub)term.
invalid_octal_literal.m:023: Syntax error: unterminated octal literal.
invalid_octal_literal.m:023: Syntax error: 0o is not followed by octal digits.
invalid_octal_literal.m:025: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:025: start of (sub)term.
invalid_octal_literal.m:025: Syntax error: unterminated octal literal.
invalid_octal_literal.m:025: Syntax error: 0o is not followed by octal digits.
invalid_octal_literal.m:027: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:027: start of (sub)term.
invalid_octal_literal.m:027: Syntax error: unterminated octal literal.
invalid_octal_literal.m:027: Syntax error: 0o is not followed by octal digits.
invalid_octal_literal.m:029: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:029: start of (sub)term.
invalid_octal_literal.m:029: Syntax error: unterminated octal literal.
invalid_octal_literal.m:029: Syntax error: 0o is not followed by octal digits.
invalid_octal_literal.m:031: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:031: start of (sub)term.
invalid_octal_literal.m:031: Syntax error: unterminated octal literal.
invalid_octal_literal.m:031: Syntax error: an octal literal cannot end with an
invalid_octal_literal.m:031: underscore.
invalid_octal_literal.m:033: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:033: start of (sub)term.
invalid_octal_literal.m:033: Syntax error: unterminated octal literal.
invalid_octal_literal.m:033: Syntax error: an octal literal cannot end with an
invalid_octal_literal.m:033: underscore.
invalid_octal_literal.m:035: Error: clause for predicate `o77'/0
invalid_octal_literal.m:035: without corresponding `:- pred' declaration.
invalid_octal_literal.m:035: Inferred :- pred o77.
invalid_octal_literal.m:035: Syntax error: unterminated decimal literal.
invalid_octal_literal.m:037: Syntax error: unterminated decimal literal.
invalid_octal_literal.m:035: Syntax error: a decimal literal cannot end with an
invalid_octal_literal.m:035: underscore.
invalid_octal_literal.m:037: Syntax error: a decimal literal cannot end with an
invalid_octal_literal.m:037: underscore.