Files
mercury/tests/hard_coded/parse_number_from_io.m
Julien Fischer b3835dd826 Fix bug #430.
The lexer was not allowing underscores between leading zeros in decimal integer
literals and float literals (e.g. 0_0 or 0_0.0).

library/lexer.m:
     Allow underscores in the above cases.

tests/hard_coded/parse_number_from_io.{m,exp,exp2,exp3}:
tests/hard_coded/parse_number_from_string.{m,exp,exp2,exp3}:
     Extend these tests to cover the above cases.

tests/invalid/invalid_binary_literal.err_exp:
tests/invalid/invalid_octal_literal.err_exp:
tests/invalid/invalid_hex_literal.err_exp:
     Conform to the above change.
2017-01-29 14:38:26 +11:00

79 lines
2.2 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
%---------------------------------------------------------------------------%
:- module parse_number_from_io.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
main(!IO) :-
io.print_line("Decimal:", !IO),
io.print_line(0, !IO),
io.print_line(-0, !IO),
io.print_line(00, !IO),
io.print_line(0_0, !IO),
io.print_line(10, !IO),
io.print_line(-10, !IO),
io.print_line(1_0, !IO),
io.print_line(-1_0, !IO),
io.print_line(01, !IO),
io.print_line(0_1, !IO),
io.print_line(-01, !IO),
io.print_line(-0_1, !IO),
io.nl(!IO),
io.print_line("Binary:", !IO),
io.print_line(0b0, !IO),
io.print_line(-0b0, !IO),
io.print_line(0b_1, !IO),
io.print_line(-0b_1, !IO),
io.print_line(0b_1000_100, !IO),
io.print_line(-0b_1000_100, !IO),
io.nl(!IO),
io.print_line("Octal:", !IO),
io.print_line(0o777, !IO),
io.print_line(-0o777, !IO),
io.print_line(0o_777, !IO),
io.print_line(-0o_777, !IO),
io.print_line(0o_7_7_7, !IO),
io.print_line(-0o_7_7_7, !IO),
io.print_line(0o_7__7___7, !IO),
io.print_line(-0o_7__7___7, !IO),
io.nl(!IO),
io.print_line("Hexadecimal:", !IO),
io.print_line(0xff, !IO),
io.print_line(-0xff, !IO),
io.print_line(0x_ff, !IO),
io.print_line(-0x_ff, !IO),
io.print_line(0xf_f, !IO),
io.print_line(-0xf_f, !IO),
io.print_line(0x_f_f__f, !IO),
io.nl(!IO),
io.print_line("Float:", !IO),
io.print_line(0.123, !IO),
io.print_line(-0.123, !IO),
io.print_line(0.1_2__3, !IO),
io.print_line(-0.1_2__3, !IO),
io.print_line(1.123, !IO),
io.print_line(-1.123, !IO),
io.print_line(1_2.123, !IO),
io.print_line(-1_2.123, !IO),
io.print_line(1__2.1_2__3, !IO),
io.print_line(-1__2.1_2__3, !IO),
io.print_line(1_2_3e1_1, !IO),
io.print_line(1_2_3E1_1, !IO),
io.print_line(1_2e+1_1, !IO),
io.print_line(1_2E+1_1, !IO),
io.print_line(1_2e-1_1, !IO),
io.print_line(1_2E-1_1, !IO),
io.print_line(0_0.0, !IO),
io.print_line(0_1.0_1, !IO).