Files
mercury/tests/hard_coded/parse_number_from_string.exp
Julien Fischer d8f0d402fe 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.
2017-01-16 16:24:48 +11:00

106 lines
6.3 KiB
Plaintext

Valid decimal literals:
read_term("0.") = functor(integer(0), [], context("", 1))
read_term("-0.") = functor(integer(0), [], context("", 1))
read_term("10.") = functor(integer(10), [], context("", 1))
read_term("-10.") = functor(integer(-10), [], context("", 1))
read_term("1_0.") = functor(integer(10), [], context("", 1))
read_term("-1_0.") = functor(integer(-10), [], context("", 1))
read_term("1_000_000_000_000_000_000_000.") = functor(big_integer(base_10, i(5, [13877, 12907, 7261, 14976, 0])), [], context("", 1))
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 literal
read_term("-123_.") = Syntax error: unterminated decimal literal
read_term("-_123") = Syntax error: operator or `.' expected
Valid binary literals:
read_term("0b0.") = functor(integer(0), [], context("", 1))
read_term("-0b0.") = functor(integer(0), [], context("", 1))
read_term("0b_1.") = functor(integer(1), [], context("", 1))
read_term("-0b_1.") = functor(integer(-1), [], context("", 1))
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 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))
read_term("-0o77.") = functor(integer(-63), [], context("", 1))
read_term("0o_77.") = functor(integer(63), [], context("", 1))
read_term("-0o_77.") = functor(integer(-63), [], context("", 1))
read_term("0o_7_7.") = functor(integer(63), [], context("", 1))
read_term("-0o_7_7.") = functor(integer(-63), [], context("", 1))
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 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))
read_term("-0xff.") = functor(integer(-255), [], context("", 1))
read_term("0x_ff.") = functor(integer(255), [], context("", 1))
read_term("-0x_ff.") = functor(integer(-255), [], context("", 1))
read_term("0xf_f.") = functor(integer(255), [], context("", 1))
read_term("-0xf_f.") = functor(integer(-255), [], context("", 1))
read_term("0x_f_f__f.") = functor(integer(4095), [], context("", 1))
read_term("-0x_f_f__f.") = functor(integer(-4095), [], context("", 1))
read_term("0xfffffffffffffffffffffffff.") = functor(big_integer(base_16, i(8, [3, 16383, 16383, 16383, 16383, 16383, 16383, 16383])), [], context("", 1))
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 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))
read_term("-0.123.") = functor(float(-0.123), [], context("", 1))
read_term("0.1_2__3.") = functor(float(0.123), [], context("", 1))
read_term("-0.1_2__3.") = functor(float(-0.123), [], context("", 1))
read_term("1.123.") = functor(float(1.123), [], context("", 1))
read_term("-1.123.") = functor(float(-1.123), [], context("", 1))
read_term("1_2.123.") = functor(float(12.123), [], context("", 1))
read_term("-1_2.123.") = functor(float(-12.123), [], context("", 1))
read_term("1__2.1_2__3.") = functor(float(12.123), [], context("", 1))
read_term("-1__2.1_2__3.") = functor(float(-12.123), [], context("", 1))
read_term("1_2_3e1_1.") = functor(float(12300000000000.0), [], context("", 1))
read_term("1_2_3E1_1.") = functor(float(12300000000000.0), [], context("", 1))
read_term("1_2e+1_1.") = functor(float(1200000000000.0), [], context("", 1))
read_term("1_2E+1_1.") = functor(float(1200000000000.0), [], context("", 1))
read_term("1_2e-1_1.") = functor(float(1.2e-10), [], context("", 1))
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 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 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 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 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