[m-rev.] for review: document underscores in numeric literals
Julien Fischer
jfischer at opturion.com
Thu Jan 12 17:28:46 AEDT 2017
For review by anyone.
-----------------------
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.
Julien.
diff --git a/NEWS b/NEWS
index a5b3e9f..8bdd8b2 100644
--- a/NEWS
+++ b/NEWS
@@ -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
diff --git a/doc/reference_manual.texi b/doc/reference_manual.texi
index 024be43..ad820d9 100644
--- a/doc/reference_manual.texi
+++ b/doc/reference_manual.texi
@@ -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},
+ at 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.
+
+ at 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
+ at 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.
+ at 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
diff --git a/library/lexer.m b/library/lexer.m
index 748512a..7b3b803 100644
--- a/library/lexer.m
+++ b/library/lexer.m
@@ -2034,7 +2034,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),
@@ -2050,7 +2050,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)
).
@@ -2063,7 +2063,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
@@ -2073,7 +2073,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")
)
).
@@ -2091,11 +2091,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)
).
@@ -2114,7 +2114,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,
@@ -2132,7 +2132,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")
)
)
).
@@ -2159,7 +2159,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)
)
@@ -2170,7 +2170,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)
).
@@ -2184,7 +2184,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
@@ -2194,7 +2194,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")
)
).
@@ -2212,11 +2212,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)
).
@@ -2235,7 +2235,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,
@@ -2253,7 +2253,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")
)
)
).
@@ -2280,7 +2280,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)
)
@@ -2291,7 +2291,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)
).
@@ -2305,7 +2305,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
@@ -2315,7 +2315,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")
)
).
@@ -2333,11 +2333,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)
).
@@ -2356,7 +2356,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,
@@ -2374,7 +2374,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")
)
)
).
@@ -2401,7 +2401,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)
)
@@ -2412,7 +2412,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)
).
@@ -2432,7 +2432,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,
@@ -2449,7 +2449,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
(
@@ -2467,7 +2467,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")
)
)
).
@@ -2493,7 +2493,7 @@ string_get_number(String, !.LastDigit, Len, Posn0, Token, Context, !Posn) :-
!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
@@ -2514,7 +2514,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)
)
@@ -2525,7 +2525,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)
).
@@ -2547,7 +2547,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,
@@ -2573,7 +2573,7 @@ get_int_dot(Stream, !.LastDigit, !.RevChars, Token, !IO) :-
)
;
!.LastDigit = last_digit_is_underscore,
- Token = error("unterminated decimal constant")
+ Token = error("unterminated decimal literal")
)
)
).
@@ -2600,7 +2600,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)
)
@@ -2612,7 +2612,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)
).
@@ -2724,7 +2724,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")
)
).
@@ -2742,7 +2742,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
@@ -2765,7 +2765,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
@@ -2774,7 +2774,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")
)
).
@@ -2793,11 +2793,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)
).
@@ -2819,7 +2819,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,
@@ -2837,7 +2837,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")
)
)
).
@@ -2865,7 +2865,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)
)
@@ -2876,7 +2876,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)
).
diff --git a/tests/hard_coded/parse_number_from_string.exp b/tests/hard_coded/parse_number_from_string.exp
index aab148d..dc8623f 100644
--- a/tests/hard_coded/parse_number_from_string.exp
+++ b/tests/hard_coded/parse_number_from_string.exp
@@ -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
diff --git a/tests/hard_coded/parse_number_from_string.exp2 b/tests/hard_coded/parse_number_from_string.exp2
index b539f9f..68f1c63 100644
--- a/tests/hard_coded/parse_number_from_string.exp2
+++ b/tests/hard_coded/parse_number_from_string.exp2
@@ -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
diff --git a/tests/hard_coded/parse_number_from_string.exp3 b/tests/hard_coded/parse_number_from_string.exp3
index 82e80be..258a76f 100644
--- a/tests/hard_coded/parse_number_from_string.exp3
+++ b/tests/hard_coded/parse_number_from_string.exp3
@@ -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
diff --git a/tests/invalid/invalid_binary_literal.err_exp b/tests/invalid/invalid_binary_literal.err_exp
index c6b6770..216d695 100644
--- a/tests/invalid/invalid_binary_literal.err_exp
+++ b/tests/invalid/invalid_binary_literal.err_exp
@@ -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 `.'
diff --git a/tests/invalid/invalid_decimal_literal.err_exp b/tests/invalid/invalid_decimal_literal.err_exp
index 1ab2c10..c9b7704 100644
--- a/tests/invalid/invalid_decimal_literal.err_exp
+++ b/tests/invalid/invalid_decimal_literal.err_exp
@@ -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.
diff --git a/tests/invalid/invalid_float_literal.err_exp b/tests/invalid/invalid_float_literal.err_exp
index 85e27cc..e6b463e 100644
--- a/tests/invalid/invalid_float_literal.err_exp
+++ b/tests/invalid/invalid_float_literal.err_exp
@@ -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.
diff --git a/tests/invalid/invalid_hex_literal.err_exp b/tests/invalid/invalid_hex_literal.err_exp
index cd402e3..b2127ca 100644
--- a/tests/invalid/invalid_hex_literal.err_exp
+++ b/tests/invalid/invalid_hex_literal.err_exp
@@ -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 `.'
diff --git a/tests/invalid/invalid_octal_literal.err_exp b/tests/invalid/invalid_octal_literal.err_exp
index d84cd8f..6c4ecd8 100644
--- a/tests/invalid/invalid_octal_literal.err_exp
+++ b/tests/invalid/invalid_octal_literal.err_exp
@@ -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 `.'
More information about the reviews
mailing list