mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 22:42:24 +00:00
voc compiler first commit
This commit is contained in:
parent
4a7dc4b549
commit
760d826948
119 changed files with 30394 additions and 0 deletions
106
src/lib/ooc2/ooc2LRealConv.Mod
Normal file
106
src/lib/ooc2/ooc2LRealConv.Mod
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
(* $Id: LRealConv.Mod,v 1.13 2003/04/06 12:11:15 mva Exp $ *)
|
||||
MODULE ooc2LRealConv;
|
||||
(* String to LONGREAL conversion functions.
|
||||
Copyright (C) 2002 Michael van Acken
|
||||
|
||||
This module is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License
|
||||
as published by the Free Software Foundation; either version 2 of
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
This module is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with OOC. If not, write to the Free Software Foundation,
|
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*)
|
||||
|
||||
IMPORT
|
||||
SYSTEM, libc := oocwrapperlibc, CharClass := ooc2CharClass, ConvTypes := ooc2ConvTypes, Real0 := ooc2Real0;
|
||||
|
||||
(**
|
||||
|
||||
The regular expression for a signed fixed-point real number is
|
||||
@samp{[+-]?\d+(\.\d* )?}. For the optional exponent part, it is
|
||||
@samp{E[+-]?\d+}.
|
||||
|
||||
*)
|
||||
|
||||
TYPE
|
||||
ConvResults* = ConvTypes.ConvResults;
|
||||
(**One of @oconst{strAllRight}, @oconst{strOutOfRange},
|
||||
@oconst{strWrongFormat}, or @oconst{strEmpty}. *)
|
||||
|
||||
CONST
|
||||
strAllRight*=ConvTypes.strAllRight;
|
||||
(**The string format is correct for the corresponding conversion. *)
|
||||
strOutOfRange*=ConvTypes.strOutOfRange;
|
||||
(**The string is well-formed but the value cannot be represented. *)
|
||||
strWrongFormat*=ConvTypes.strWrongFormat;
|
||||
(**The string is in the wrong format for the conversion. *)
|
||||
strEmpty*=ConvTypes.strEmpty;
|
||||
(**The given string is empty. *)
|
||||
|
||||
CONST
|
||||
maxValue = "17976931348623157";
|
||||
(* signifcant digits of the maximum value 1.7976931348623157D+308 *)
|
||||
maxExp = 308;
|
||||
(* maxium positive exponent of a normalized number *)
|
||||
|
||||
PROCEDURE ScanReal*(inputCh: CHAR;
|
||||
VAR chClass: ConvTypes.ScanClass;
|
||||
VAR nextState: ConvTypes.ScanState);
|
||||
BEGIN
|
||||
Real0.ScanReal (inputCh, chClass, nextState);
|
||||
END ScanReal;
|
||||
|
||||
PROCEDURE FormatReal* (str: ARRAY OF CHAR): ConvResults;
|
||||
BEGIN
|
||||
RETURN Real0.FormatReal (str, maxExp, maxValue);
|
||||
END FormatReal;
|
||||
|
||||
PROCEDURE ValueReal*(str: ARRAY OF CHAR): LONGREAL;
|
||||
(* result is undefined if FormatReal(str) # strAllRight *)
|
||||
VAR
|
||||
i: LONGINT;
|
||||
value: LONGREAL;
|
||||
BEGIN
|
||||
i := 0;
|
||||
WHILE CharClass.IsWhiteSpace(str[i]) DO
|
||||
(* skip our definition of whitespace *)
|
||||
INC (i);
|
||||
END;
|
||||
IF libc.sscanf(SYSTEM.ADR(str[i]), "%lf", SYSTEM.ADR(value)) = 1 THEN
|
||||
(* <*PUSH; Warnings:=FALSE*> *)
|
||||
RETURN value (* syntax is ok *)
|
||||
(* <*POP*> *)
|
||||
ELSE
|
||||
RETURN 0; (* error *)
|
||||
END;
|
||||
END ValueReal;
|
||||
|
||||
PROCEDURE LengthFloatReal*(real: LONGREAL; sigFigs: INTEGER): INTEGER;
|
||||
BEGIN
|
||||
(*<*PUSH; Assertions:=TRUE*>*)
|
||||
ASSERT (FALSE)
|
||||
(*<*POP*>*)
|
||||
END LengthFloatReal;
|
||||
|
||||
PROCEDURE LengthEngReal*(real: LONGREAL; sigFigs: INTEGER): INTEGER;
|
||||
BEGIN
|
||||
(*<*PUSH; Assertions:=TRUE*>*)
|
||||
ASSERT (FALSE)
|
||||
(*<*POP*>*)
|
||||
END LengthEngReal;
|
||||
|
||||
PROCEDURE LengthFixedReal*(real: LONGREAL; place: INTEGER): INTEGER;
|
||||
BEGIN
|
||||
(*<*PUSH; Assertions:=TRUE*>*)
|
||||
ASSERT (FALSE)
|
||||
(*<*POP*>*)
|
||||
END LengthFixedReal;
|
||||
|
||||
END ooc2LRealConv.
|
||||
Loading…
Add table
Add a link
Reference in a new issue