Document underscores in numeric literals.

Standardize terminology in error messages about ill-formed numeric literals.

doc/reference_manual.texi:
      Document underscores in numeric literals.

      Add a TODO comment about a future piece of work.

NEWS:
     Announce the addition of support for underscores in numeric literals.

library/lexer.m:
     Use the term "literal" instead of "constant" or "token" when
     referring to numeric literals in error messages.

     s/hex/hexadecimal/ in those same error messages.

tests/hard_coded/parse_number_from_string.exp*:
tests/invalid/invalid_{binary,decimal,hex,octal}_literal.err_exp:
     Conform to the above change in error messages from the lexer.
This commit is contained in:
Julien Fischer
2017-01-16 16:24:34 +11:00
parent 34f4aa5b30
commit d8f0d402fe
11 changed files with 191 additions and 172 deletions

3
NEWS
View File

@@ -141,6 +141,9 @@ Changes to the Mercury language:
* The Java backend now supports defining foreign types as primitive Java
types.
* Digits in numeric literals may now be separated by underscores in order
to improve readability.
Changes to the Mercury standard library:
* We have added variants of the process_options predicates to the getopt

View File

@@ -310,15 +310,31 @@ A hexadecimal literal is @samp{0x} followed by any sequence of hexadecimal
digits.
A character-code literal is @samp{0'} followed by any single character.
For decimal, binary, octal and hexadecimal literals, an arbitrary number of
underscores (@samp{_}) may be inserted between the digits. An arbitrary number
of underscores may also be inserted between the radix prefix (i.e. @samp{0b},
@samp{0o} and @samp{0x}) and the initial digit.
The purpose of the underscores is to improve readability and they do not affect
the numeric value of the literal.
@c TODO: we should support hexadecimal float literals too.
@item float
A floating point literal consists of a sequence of decimal digits,
a decimal point and a sequence of digits (the fraction part), and
the letter @samp{E} (or @samp{e}), an optional sign (@samp{+} or @samp{-}),
and then another sequence of decimal digits (the exponent).
A floating point literal consists of a sequence of decimal digits, a decimal
point (@samp{.}) and a sequence of digits (the fraction part), and the letter
@samp{E} (or @samp{e}), an optional sign (@samp{+} or @samp{-}), and then
another sequence of decimal digits (the exponent).
The fraction part or the exponent (but not both) may be omitted.
An arbitrary number of underscores (@samp{_}) may be inserted between the
digits in a floating point literal.
Underscores may @emph{not} occur adjacent to any non-digit characters (i.e.
@samp{.}, @samp{e}, @samp{E}, @samp{+} or @samp{-}) in a floating point
literal.
The purpose of the underscores is to improve readability and they do not affect
the numeric value of the literal.
@item implementation_defined_literal
An implementation-defined literal consists of a dollar sign (@code{$})
An implementation-defined literal consists of a dollar sign (@samp{$})
followed by an unquoted name.
@item open_ct

View File

@@ -2035,7 +2035,7 @@ get_char_code(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated char code constant")
Token = error("unterminated char code literal")
;
Result = ok,
char.to_int(Char, CharCode),
@@ -2051,7 +2051,7 @@ string_get_char_code(String, Len, Posn0, Token, Context, !Posn) :-
Token = integer(CharCode),
string_get_context(Posn0, Context, !Posn)
else
Token = error("unterminated char code constant"),
Token = error("unterminated char code literal"),
string_get_context(Posn0, Context, !Posn)
).
@@ -2064,7 +2064,7 @@ get_binary(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated binary constant")
Token = error("unterminated binary literal")
;
Result = ok,
( if char.is_binary_digit(Char) then
@@ -2074,7 +2074,7 @@ get_binary(Stream, Token, !IO) :-
get_binary(Stream, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated binary constant")
Token = error("unterminated binary literal")
)
).
@@ -2092,11 +2092,11 @@ string_get_binary(String, Len, Posn0, Token, Context, !Posn) :-
string_get_binary(String, Len, Posn1, Token, Context, !Posn)
else
string_ungetchar(String, !Posn),
Token = error("unterminated binary constant"),
Token = error("unterminated binary literal"),
string_get_context(Posn0, Context, !Posn)
)
else
Token = error("unterminated binary constant"),
Token = error("unterminated binary literal"),
string_get_context(Posn0, Context, !Posn)
).
@@ -2115,7 +2115,7 @@ get_binary_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_2, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary constant")
Token = error("unterminated binary literal")
)
;
Result = ok,
@@ -2133,7 +2133,7 @@ get_binary_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_2, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary constant")
Token = error("unterminated binary literal")
)
)
).
@@ -2160,7 +2160,7 @@ string_get_binary_2(String, !.LastDigit, Len, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_2, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary constant")
Token = error("unterminated binary literal")
),
string_get_context(Posn1, Context, !Posn)
)
@@ -2171,7 +2171,7 @@ string_get_binary_2(String, !.LastDigit, Len, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_2, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated binary constant")
Token = error("unterminated binary literal")
),
string_get_context(Posn1, Context, !Posn)
).
@@ -2185,7 +2185,7 @@ get_octal(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated octal constant")
Token = error("unterminated octal literal")
;
Result = ok,
( if char.is_octal_digit(Char) then
@@ -2195,7 +2195,7 @@ get_octal(Stream, Token, !IO) :-
get_octal(Stream, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated octal constant")
Token = error("unterminated octal literal")
)
).
@@ -2213,11 +2213,11 @@ string_get_octal(String, Len, Posn0, Token, Context, !Posn) :-
string_get_octal(String, Len, Posn0, Token, Context, !Posn)
else
string_ungetchar(String, !Posn),
Token = error("unterminated octal constant"),
Token = error("unterminated octal literal"),
string_get_context(Posn0, Context, !Posn)
)
else
Token = error("unterminated octal constant"),
Token = error("unterminated octal literal"),
string_get_context(Posn0, Context, !Posn)
).
@@ -2236,7 +2236,7 @@ get_octal_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_8, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal constant")
Token = error("unterminated octal literal")
)
;
Result = ok,
@@ -2254,7 +2254,7 @@ get_octal_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_8, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal constant")
Token = error("unterminated octal literal")
)
)
).
@@ -2281,7 +2281,7 @@ string_get_octal_2(String, !.LastDigit, Len, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_8, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal constant")
Token = error("unterminated octal literal")
),
string_get_context(Posn1, Context, !Posn)
)
@@ -2292,7 +2292,7 @@ string_get_octal_2(String, !.LastDigit, Len, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_8, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated octal constant")
Token = error("unterminated octal literal")
),
string_get_context(Posn1, Context, !Posn)
).
@@ -2306,7 +2306,7 @@ get_hex(Stream, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated hex constant")
Token = error("unterminated hexadecimal literal")
;
Result = ok,
( if char.is_hex_digit(Char) then
@@ -2316,7 +2316,7 @@ get_hex(Stream, Token, !IO) :-
get_hex(Stream, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated hex constant")
Token = error("unterminated hexadecimal literal")
)
).
@@ -2334,11 +2334,11 @@ string_get_hex(String, Len, Posn0, Token, Context, !Posn) :-
string_get_hex(String, Len, Posn0, Token, Context, !Posn)
else
string_ungetchar(String, !Posn),
Token = error("unterminated hex constant"),
Token = error("unterminated hexadecimal literal"),
string_get_context(Posn0, Context, !Posn)
)
else
Token = error("unterminated hex constant"),
Token = error("unterminated hexadecimal literal"),
string_get_context(Posn0, Context, !Posn)
).
@@ -2357,7 +2357,7 @@ get_hex_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_16, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hex constant")
Token = error("unterminated hexadecimal literal")
)
;
Result = ok,
@@ -2375,7 +2375,7 @@ get_hex_2(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_16, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hex constant")
Token = error("unterminated hexadecimal literal")
)
)
).
@@ -2402,7 +2402,7 @@ string_get_hex_2(String, !.LastDigit, Len, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_16, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hex constant")
Token = error("unterminated hexadecimal literal")
),
string_get_context(Posn1, Context, !Posn)
)
@@ -2413,7 +2413,7 @@ string_get_hex_2(String, !.LastDigit, Len, Posn1, Token, Context, !Posn) :-
conv_string_to_int(BinaryString, base_16, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated hex constant")
Token = error("unterminated hexadecimal literal")
),
string_get_context(Posn1, Context, !Posn)
).
@@ -2433,7 +2433,7 @@ get_number(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
)
;
Result = ok,
@@ -2450,7 +2450,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 constant")
Token = error("unterminated decimal literal")
)
else if ( Char = 'e' ; Char = 'E' ) then
(
@@ -2468,7 +2468,7 @@ get_number(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
)
)
).
@@ -2494,7 +2494,7 @@ string_get_number(String, !.LastDigit, Len, Posn0, Token, Context, !Posn) :-
Context, !Posn)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant"),
Token = error("unterminated decimal literal"),
string_get_context(Posn0, Context, !Posn)
)
else if ( Char = 'e' ; Char = 'E' ) then
@@ -2515,7 +2515,7 @@ string_get_number(String, !.LastDigit, Len, Posn0, Token, Context, !Posn) :-
conv_string_to_int(NumberString, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
),
string_get_context(Posn0, Context, !Posn)
)
@@ -2526,7 +2526,7 @@ string_get_number(String, !.LastDigit, Len, Posn0, Token, Context, !Posn) :-
conv_string_to_int(NumberString, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
),
string_get_context(Posn0, Context, !Posn)
).
@@ -2548,7 +2548,7 @@ get_int_dot(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_int(!.RevChars, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
)
;
Result = ok,
@@ -2574,7 +2574,7 @@ get_int_dot(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
)
)
).
@@ -2601,7 +2601,7 @@ string_get_int_dot(String, !.LastDigit, Len, Posn0, Token, Context, !Posn) :-
conv_string_to_int(NumberString, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
),
string_get_context(Posn0, Context, !Posn)
)
@@ -2613,7 +2613,7 @@ string_get_int_dot(String, !.LastDigit, Len, Posn0, Token, Context, !Posn) :-
conv_string_to_int(NumberString, base_10, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated decimal constant")
Token = error("unterminated decimal literal")
),
string_get_context(Posn0, Context, !Posn)
).
@@ -2727,7 +2727,7 @@ get_float_exponent(Stream, !.RevChars, Token, !IO) :-
get_float_exponent_3(Stream, LastDigit, !.RevChars, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
)
).
@@ -2745,7 +2745,7 @@ string_get_float_exponent(String, Len, Posn0, Token, Context, !Posn) :-
Context, !Posn)
else
string_ungetchar(String, !Posn),
Token = error("unterminated exponent in float token"),
Token = error("unterminated exponent in float literal"),
string_get_context(Posn0, Context, !Posn)
)
else
@@ -2768,7 +2768,7 @@ get_float_exponent_2(Stream, !.RevChars, Token, !IO) :-
Token = io_error(Error)
;
Result = eof,
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
;
Result = ok,
( if char.is_digit(Char) then
@@ -2777,7 +2777,7 @@ get_float_exponent_2(Stream, !.RevChars, Token, !IO) :-
get_float_exponent_3(Stream, LastDigit, !.RevChars, Token, !IO)
else
io.putback_char(Stream, Char, !IO),
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
)
).
@@ -2796,11 +2796,11 @@ string_get_float_exponent_2(String, Len, Posn0, Token, Context, !Posn) :-
Context, !Posn)
else
string_ungetchar(String, !Posn),
Token = error("unterminated exponent in float token"),
Token = error("unterminated exponent in float literal"),
string_get_context(Posn0, Context, !Posn)
)
else
Token = error("unterminated exponent in float token"),
Token = error("unterminated exponent in float literal"),
string_get_context(Posn0, Context, !Posn)
).
@@ -2822,7 +2822,7 @@ get_float_exponent_3(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_float(!.RevChars, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
)
;
Result = ok,
@@ -2840,7 +2840,7 @@ get_float_exponent_3(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
rev_char_list_to_float(!.RevChars, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
)
)
).
@@ -2868,7 +2868,7 @@ string_get_float_exponent_3(String, !.LastDigit, Len, Posn0, Token, Context,
conv_to_float(FloatString, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
),
string_get_context(Posn0, Context, !Posn)
)
@@ -2879,7 +2879,7 @@ string_get_float_exponent_3(String, !.LastDigit, Len, Posn0, Token, Context,
conv_to_float(FloatString, Token)
;
!.LastDigit = last_digit_is_underscore,
Token = error("unterminated exponent in float token")
Token = error("unterminated exponent in float literal")
),
string_get_context(Posn0, Context, !Posn)
).

View File

@@ -9,8 +9,8 @@ read_term("1_000_000_000_000_000_000_000.") = functor(big_integer(base_10, i(5,
read_term("-1_000_000_000_000_000_000_000.") = functor(atom("-"), [functor(big_integer(base_10, i(5, [13877, 12907, 7261, 14976, 0])), [], context("", 1))], context("", 1))
Invalid decimal literals:
read_term("123_.") = Syntax error: unterminated decimal constant
read_term("-123_.") = Syntax error: unterminated decimal constant
read_term("123_.") = Syntax error: unterminated decimal literal
read_term("-123_.") = Syntax error: unterminated decimal literal
read_term("-_123") = Syntax error: operator or `.' expected
Valid binary literals:
@@ -22,12 +22,12 @@ read_term("0b_1000_100.") = functor(integer(68), [], context("", 1))
read_term("-0b_1000_100.") = functor(integer(-68), [], context("", 1))
Invalid binary literals:
read_term("0b.") = Syntax error: unterminated binary constant
read_term("-0b.") = Syntax error: unterminated binary constant
read_term("0b_.") = Syntax error: unterminated binary constant
read_term("-0b_.") = Syntax error: unterminated binary constant
read_term("0b11_.") = Syntax error: unterminated binary constant
read_term("-0b11_.") = Syntax error: unterminated binary constant
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
Valid octal literals:
read_term("0o77.") = functor(integer(63), [], context("", 1))
@@ -40,12 +40,12 @@ read_term("0o_7__7___7.") = functor(integer(511), [], context("", 1))
read_term("-0o_7__7___7.") = functor(integer(-511), [], context("", 1))
Invalid octal literals:
read_term("0o.") = Syntax error: unterminated octal constant
read_term("-0o") = Syntax error: unterminated octal constant
read_term("0o_.") = Syntax error: unterminated octal constant
read_term("-0o_.") = Syntax error: unterminated octal constant
read_term("0o77_.") = Syntax error: unterminated octal constant
read_term("-0o77_.") = Syntax error: unterminated octal constant
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
Valid hexadecimal literals:
read_term("0xff.") = functor(integer(255), [], context("", 1))
@@ -60,12 +60,12 @@ read_term("0xfffffffffffffffffffffffff.") = functor(big_integer(base_16, i(8, [3
read_term("-0xfffffffffffffffffffffffff.") = functor(atom("-"), [functor(big_integer(base_16, i(8, [3, 16383, 16383, 16383, 16383, 16383, 16383, 16383])), [], context("", 1))], context("", 1))
Invalid hexadecimal literals:
read_term("0x.") = Syntax error: unterminated hex constant
read_term("-0x.") = Syntax error: unterminated hex constant
read_term("0x_.") = Syntax error: unterminated hex constant
read_term("-0x_.") = Syntax error: unterminated hex constant
read_term("0xff_.") = Syntax error: unterminated hex constant
read_term("-0xff_.") = Syntax error: unterminated hex constant
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
Valid float literals:
read_term("0.123.") = functor(float(0.123), [], context("", 1))
@@ -87,19 +87,19 @@ read_term("1_2E-1_1.") = functor(float(1.2e-10), [], 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 token
read_term("123_._123.") = Syntax error: unterminated decimal constant
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: underscore following decimal point
read_term("123_.123.") = Syntax error: unterminated decimal constant
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("123e_12.") = Syntax error: unterminated exponent in float token
read_term("123E_12.") = Syntax error: unterminated exponent in float token
read_term("123e12_.") = Syntax error: unterminated exponent in float token
read_term("123E12_.") = Syntax error: unterminated exponent in float token
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("123.12e-_12.") = Syntax error: unterminated exponent in float token
read_term("123.12e+_12.") = Syntax error: unterminated exponent in float token
read_term("123.12e12_.") = Syntax error: unterminated exponent in float token
read_term("123.12E12_.") = Syntax error: unterminated exponent in float token
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
read_term("123.12E12_.") = Syntax error: unterminated exponent in float literal

View File

@@ -9,8 +9,8 @@ read_term("1_000_000_000_000_000_000_000.") = functor(big_integer(base_10, i(5,
read_term("-1_000_000_000_000_000_000_000.") = functor(atom("-"), [functor(big_integer(base_10, i(5, [13877, 12907, 7261, 14976, 0])), [], context("", 1))], context("", 1))
Invalid decimal literals:
read_term("123_.") = Syntax error: unterminated decimal constant
read_term("-123_.") = Syntax error: unterminated decimal constant
read_term("123_.") = Syntax error: unterminated decimal literal
read_term("-123_.") = Syntax error: unterminated decimal literal
read_term("-_123") = Syntax error: operator or `.' expected
Valid binary literals:
@@ -22,12 +22,12 @@ read_term("0b_1000_100.") = functor(integer(68), [], context("", 1))
read_term("-0b_1000_100.") = functor(integer(-68), [], context("", 1))
Invalid binary literals:
read_term("0b.") = Syntax error: unterminated binary constant
read_term("-0b.") = Syntax error: unterminated binary constant
read_term("0b_.") = Syntax error: unterminated binary constant
read_term("-0b_.") = Syntax error: unterminated binary constant
read_term("0b11_.") = Syntax error: unterminated binary constant
read_term("-0b11_.") = Syntax error: unterminated binary constant
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
Valid octal literals:
read_term("0o77.") = functor(integer(63), [], context("", 1))
@@ -40,12 +40,12 @@ read_term("0o_7__7___7.") = functor(integer(511), [], context("", 1))
read_term("-0o_7__7___7.") = functor(integer(-511), [], context("", 1))
Invalid octal literals:
read_term("0o.") = Syntax error: unterminated octal constant
read_term("-0o") = Syntax error: unterminated octal constant
read_term("0o_.") = Syntax error: unterminated octal constant
read_term("-0o_.") = Syntax error: unterminated octal constant
read_term("0o77_.") = Syntax error: unterminated octal constant
read_term("-0o77_.") = Syntax error: unterminated octal constant
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
Valid hexadecimal literals:
read_term("0xff.") = functor(integer(255), [], context("", 1))
@@ -60,12 +60,12 @@ read_term("0xfffffffffffffffffffffffff.") = functor(big_integer(base_16, i(8, [3
read_term("-0xfffffffffffffffffffffffff.") = functor(atom("-"), [functor(big_integer(base_16, i(8, [3, 16383, 16383, 16383, 16383, 16383, 16383, 16383])), [], context("", 1))], context("", 1))
Invalid hexadecimal literals:
read_term("0x.") = Syntax error: unterminated hex constant
read_term("-0x.") = Syntax error: unterminated hex constant
read_term("0x_.") = Syntax error: unterminated hex constant
read_term("-0x_.") = Syntax error: unterminated hex constant
read_term("0xff_.") = Syntax error: unterminated hex constant
read_term("-0xff_.") = Syntax error: unterminated hex constant
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
Valid float literals:
read_term("0.123.") = functor(float(0.123), [], context("", 1))
@@ -87,19 +87,19 @@ read_term("1_2E-1_1.") = functor(float(1.2E-10), [], 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 token
read_term("123_._123.") = Syntax error: unterminated decimal constant
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: underscore following decimal point
read_term("123_.123.") = Syntax error: unterminated decimal constant
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("123e_12.") = Syntax error: unterminated exponent in float token
read_term("123E_12.") = Syntax error: unterminated exponent in float token
read_term("123e12_.") = Syntax error: unterminated exponent in float token
read_term("123E12_.") = Syntax error: unterminated exponent in float token
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("123.12e-_12.") = Syntax error: unterminated exponent in float token
read_term("123.12e+_12.") = Syntax error: unterminated exponent in float token
read_term("123.12e12_.") = Syntax error: unterminated exponent in float token
read_term("123.12E12_.") = Syntax error: unterminated exponent in float token
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
read_term("123.12E12_.") = Syntax error: unterminated exponent in float literal

View File

@@ -9,8 +9,8 @@ read_term("1_000_000_000_000_000_000_000.") = functor(big_integer(base_10, i(5,
read_term("-1_000_000_000_000_000_000_000.") = functor(atom("-"), [functor(big_integer(base_10, i(5, [13877, 12907, 7261, 14976, 0])), [], context("", 1))], context("", 1))
Invalid decimal literals:
read_term("123_.") = Syntax error: unterminated decimal constant
read_term("-123_.") = Syntax error: unterminated decimal constant
read_term("123_.") = Syntax error: unterminated decimal literal
read_term("-123_.") = Syntax error: unterminated decimal literal
read_term("-_123") = Syntax error: operator or `.' expected
Valid binary literals:
@@ -22,12 +22,12 @@ read_term("0b_1000_100.") = functor(integer(68), [], context("", 1))
read_term("-0b_1000_100.") = functor(integer(-68), [], context("", 1))
Invalid binary literals:
read_term("0b.") = Syntax error: unterminated binary constant
read_term("-0b.") = Syntax error: unterminated binary constant
read_term("0b_.") = Syntax error: unterminated binary constant
read_term("-0b_.") = Syntax error: unterminated binary constant
read_term("0b11_.") = Syntax error: unterminated binary constant
read_term("-0b11_.") = Syntax error: unterminated binary constant
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
Valid octal literals:
read_term("0o77.") = functor(integer(63), [], context("", 1))
@@ -40,12 +40,12 @@ read_term("0o_7__7___7.") = functor(integer(511), [], context("", 1))
read_term("-0o_7__7___7.") = functor(integer(-511), [], context("", 1))
Invalid octal literals:
read_term("0o.") = Syntax error: unterminated octal constant
read_term("-0o") = Syntax error: unterminated octal constant
read_term("0o_.") = Syntax error: unterminated octal constant
read_term("-0o_.") = Syntax error: unterminated octal constant
read_term("0o77_.") = Syntax error: unterminated octal constant
read_term("-0o77_.") = Syntax error: unterminated octal constant
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
Valid hexadecimal literals:
read_term("0xff.") = functor(integer(255), [], context("", 1))
@@ -60,12 +60,12 @@ read_term("0xfffffffffffffffffffffffff.") = functor(big_integer(base_16, i(8, [3
read_term("-0xfffffffffffffffffffffffff.") = functor(atom("-"), [functor(big_integer(base_16, i(8, [3, 16383, 16383, 16383, 16383, 16383, 16383, 16383])), [], context("", 1))], context("", 1))
Invalid hexadecimal literals:
read_term("0x.") = Syntax error: unterminated hex constant
read_term("-0x.") = Syntax error: unterminated hex constant
read_term("0x_.") = Syntax error: unterminated hex constant
read_term("-0x_.") = Syntax error: unterminated hex constant
read_term("0xff_.") = Syntax error: unterminated hex constant
read_term("-0xff_.") = Syntax error: unterminated hex constant
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
Valid float literals:
read_term("0.123.") = functor(float(0.123), [], context("", 1))
@@ -87,19 +87,19 @@ read_term("1_2E-1_1.") = functor(float(1.2E-10), [], 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 token
read_term("123_._123.") = Syntax error: unterminated decimal constant
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: underscore following decimal point
read_term("123_.123.") = Syntax error: unterminated decimal constant
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("123e_12.") = Syntax error: unterminated exponent in float token
read_term("123E_12.") = Syntax error: unterminated exponent in float token
read_term("123e12_.") = Syntax error: unterminated exponent in float token
read_term("123E12_.") = Syntax error: unterminated exponent in float token
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("123.12e-_12.") = Syntax error: unterminated exponent in float token
read_term("123.12e+_12.") = Syntax error: unterminated exponent in float token
read_term("123.12e12_.") = Syntax error: unterminated exponent in float token
read_term("123.12E12_.") = Syntax error: unterminated exponent in float token
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
read_term("123.12E12_.") = Syntax error: unterminated exponent in float literal

View File

@@ -8,22 +8,22 @@ invalid_binary_literal.m:012: Error: no clauses for function `foo7'/0.
invalid_binary_literal.m:013: Error: no clauses for function `foo8'/0.
invalid_binary_literal.m:017: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:017: start of (sub)term.
invalid_binary_literal.m:017: Syntax error: unterminated binary constant.
invalid_binary_literal.m:017: Syntax error: unterminated binary literal.
invalid_binary_literal.m:019: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:019: start of (sub)term.
invalid_binary_literal.m:019: Syntax error: unterminated binary constant.
invalid_binary_literal.m:019: Syntax error: unterminated binary literal.
invalid_binary_literal.m:021: Syntax error at token `. ': unexpected token at
invalid_binary_literal.m:021: start of (sub)term.
invalid_binary_literal.m:021: Syntax error: unterminated binary constant.
invalid_binary_literal.m:021: Syntax error: unterminated binary literal.
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 constant.
invalid_binary_literal.m:023: Syntax error: unterminated binary literal.
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 constant.
invalid_binary_literal.m:025: Syntax error: unterminated binary literal.
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 constant.
invalid_binary_literal.m:027: Syntax error: unterminated binary literal.
invalid_binary_literal.m:029: Syntax error at variable `_b11': operator or `.'
invalid_binary_literal.m:029: expected.
invalid_binary_literal.m:031: Syntax error at variable `_b11': operator or `.'

View File

@@ -1,4 +1,4 @@
invalid_decimal_literal.m:006: Error: no clauses for function `foo1'/0.
invalid_decimal_literal.m:007: Error: no clauses for function `foo2'/0.
invalid_decimal_literal.m:011: Syntax error: unterminated decimal constant.
invalid_decimal_literal.m:013: Syntax error: unterminated decimal constant.
invalid_decimal_literal.m:011: Syntax error: unterminated decimal literal.
invalid_decimal_literal.m:013: Syntax error: unterminated decimal literal.

View File

@@ -17,26 +17,26 @@ invalid_float_literal.m:021: by underscore.
invalid_float_literal.m:023: Syntax error at token `. ': unexpected token at
invalid_float_literal.m:023: start of (sub)term.
invalid_float_literal.m:023: Syntax error: unterminated exponent in float
invalid_float_literal.m:023: token.
invalid_float_literal.m:023: literal.
invalid_float_literal.m:025: In clause head: error: atom expected at 12.
invalid_float_literal.m:025: Syntax error: underscore before exponent.
invalid_float_literal.m:027: In clause head: error: atom expected at _12.
invalid_float_literal.m:027: Syntax error: unterminated exponent in float
invalid_float_literal.m:027: token.
invalid_float_literal.m:027: literal.
invalid_float_literal.m:029: In clause head: error: atom expected at _123.
invalid_float_literal.m:029: Syntax error: unterminated decimal constant.
invalid_float_literal.m:029: Syntax error: unterminated decimal literal.
invalid_float_literal.m:031: In clause head: error: atom expected at 123.
invalid_float_literal.m:031: Syntax error: underscore following decimal point.
invalid_float_literal.m:033: In clause head: error: atom expected at 123.
invalid_float_literal.m:033: Syntax error: unterminated decimal constant.
invalid_float_literal.m:033: Syntax error: unterminated decimal literal.
invalid_float_literal.m:035: Syntax error: unterminated exponent in float
invalid_float_literal.m:035: token.
invalid_float_literal.m:035: literal.
invalid_float_literal.m:035: Error: clause for predicate
invalid_float_literal.m:035: `invalid_float_literal.-'/2
invalid_float_literal.m:035: without corresponding `:- pred' declaration.
invalid_float_literal.m:035: Inferred :- pred -(T1, int).
invalid_float_literal.m:037: Syntax error: unterminated exponent in float
invalid_float_literal.m:037: token.
invalid_float_literal.m:037: literal.
invalid_float_literal.m:037: Error: clause for predicate
invalid_float_literal.m:037: `invalid_float_literal.+'/2
invalid_float_literal.m:037: without corresponding `:- pred' declaration.
@@ -45,7 +45,7 @@ invalid_float_literal.m:039: In clause head: error: atom expected at 12.
invalid_float_literal.m:039: Syntax error: underscore before exponent.
invalid_float_literal.m:041: In clause head: error: atom expected at _12.
invalid_float_literal.m:041: Syntax error: unterminated exponent in float
invalid_float_literal.m:041: token.
invalid_float_literal.m:041: literal.
invalid_float_literal.m:043: In clause head: error: atom expected at _12.
invalid_float_literal.m:043: Syntax error: unterminated exponent in float
invalid_float_literal.m:043: token.
invalid_float_literal.m:043: literal.

View File

@@ -8,22 +8,22 @@ invalid_hex_literal.m:012: Error: no clauses for function `foo7'/0.
invalid_hex_literal.m:013: Error: no clauses for function `foo8'/0.
invalid_hex_literal.m:017: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:017: start of (sub)term.
invalid_hex_literal.m:017: Syntax error: unterminated hex constant.
invalid_hex_literal.m:017: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:019: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:019: start of (sub)term.
invalid_hex_literal.m:019: Syntax error: unterminated hex constant.
invalid_hex_literal.m:019: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:021: Syntax error at token `. ': unexpected token at
invalid_hex_literal.m:021: start of (sub)term.
invalid_hex_literal.m:021: Syntax error: unterminated hex constant.
invalid_hex_literal.m:021: Syntax error: unterminated hexadecimal literal.
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 hex constant.
invalid_hex_literal.m:023: Syntax error: unterminated hexadecimal literal.
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 hex constant.
invalid_hex_literal.m:025: Syntax error: unterminated hexadecimal literal.
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 hex constant.
invalid_hex_literal.m:027: Syntax error: unterminated hexadecimal literal.
invalid_hex_literal.m:029: Syntax error at variable `_xff': operator or `.'
invalid_hex_literal.m:029: expected.
invalid_hex_literal.m:031: Syntax error at variable `_xff': operator or `.'

View File

@@ -8,22 +8,22 @@ invalid_octal_literal.m:012: Error: no clauses for function `foo7'/0.
invalid_octal_literal.m:013: Error: no clauses for function `foo8'/0.
invalid_octal_literal.m:017: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:017: start of (sub)term.
invalid_octal_literal.m:017: Syntax error: unterminated octal constant.
invalid_octal_literal.m:017: Syntax error: unterminated octal literal.
invalid_octal_literal.m:019: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:019: start of (sub)term.
invalid_octal_literal.m:019: Syntax error: unterminated octal constant.
invalid_octal_literal.m:019: Syntax error: unterminated octal literal.
invalid_octal_literal.m:021: Syntax error at token `. ': unexpected token at
invalid_octal_literal.m:021: start of (sub)term.
invalid_octal_literal.m:021: Syntax error: unterminated octal constant.
invalid_octal_literal.m:021: Syntax error: unterminated octal literal.
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 constant.
invalid_octal_literal.m:023: Syntax error: unterminated octal literal.
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 constant.
invalid_octal_literal.m:025: Syntax error: unterminated octal literal.
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 constant.
invalid_octal_literal.m:027: Syntax error: unterminated octal literal.
invalid_octal_literal.m:029: Syntax error at variable `_o77': operator or `.'
invalid_octal_literal.m:029: expected.
invalid_octal_literal.m:031: Syntax error at variable `_o77': operator or `.'