View Javadoc

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  }