1 /********************************************************************************
2 *
3 * Copyright (c) 2008 Fujitsu Services Ltd.
4 *
5 * Author: Nick Battle
6 *
7 * This file is part of VDMJ.
8 *
9 * VDMJ is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * VDMJ is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with VDMJ. If not, see <http://www.gnu.org/licenses/>.
21 *
22 ******************************************************************************/
23
24 package org.overturetool.vdmj.expressions;
25
26 import org.overturetool.vdmj.lex.LexRealToken;
27 import org.overturetool.vdmj.runtime.Context;
28 import org.overturetool.vdmj.runtime.ValueException;
29 import org.overturetool.vdmj.typechecker.Environment;
30 import org.overturetool.vdmj.typechecker.NameScope;
31 import org.overturetool.vdmj.types.RealType;
32 import org.overturetool.vdmj.types.Type;
33 import org.overturetool.vdmj.types.TypeList;
34 import org.overturetool.vdmj.values.NumericValue;
35 import org.overturetool.vdmj.values.Value;
36
37 public class RealLiteralExpression extends Expression
38 {
39 private static final long serialVersionUID = 1L;
40 public final LexRealToken value;
41
42 public RealLiteralExpression(LexRealToken value)
43 {
44 super(value.location);
45 this.value = value;
46 }
47
48 @Override
49 public String toString()
50 {
51 return value.toString();
52 }
53
54 @Override
55 public Type typeCheck(Environment env, TypeList qualifiers, NameScope scope)
56 {
57 return new RealType(location);
58 }
59
60 @Override
61 public Value eval(Context ctxt)
62 {
63 breakpoint.check(location, ctxt);
64
65 try
66 {
67 return NumericValue.valueOf(value.value, ctxt);
68 }
69 catch (ValueException e)
70 {
71 return abort(e);
72 }
73 }
74
75 @Override
76 public String kind()
77 {
78 return "literal";
79 }
80 }