1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.millscript.syntax;
22
23 import org.millscript.millscript.expr.Expr;
24 import org.millscript.millscript.expr.NameExpr;
25 import org.millscript.millscript.expr.VarExpr;
26
27 /**
28 * This class implements <code>var</code> syntax. This is used for declaring new
29 * variables. An instance of this class can be used to parse either variables or
30 * constants, by passing a flag on construction.
31 *
32 * <p>
33 * <code>var <expr> = <expr></code>
34 * </p>
35 *
36 * <p>
37 * The left hand side expression must be a name, while the right hand side
38 * expression can be any expression that returns a single result.
39 * </p>
40 *
41 * @see VarExpr
42 */
43 public final class VarSyntax extends PrefixSyntax {
44
45 /**
46 * Indicates if this variable is a constant.
47 */
48 private boolean isConst;
49
50 /**
51 * Constructs a new <code>VarSyntax</code> for parsing variable syntax.
52 *
53 * @param isconst indicates if this syntax parser is for parsing variables
54 * or constants
55 */
56 VarSyntax( final boolean isconst ) {
57 isConst = isconst;
58 }
59
60 /**
61 * @see org.millscript.millscript.syntax.PrefixSyntaxInterface#prefix(java.lang.String, org.millscript.millscript.syntax.Parser)
62 */
63 @Override
64 public VarExpr prefix( final String sym, final Parser parser ) {
65
66 NameExpr name = parser.readName();
67 parser.mustRead( "=" );
68
69 Expr value = parser.readExpr();
70 return new VarExpr( isConst, name, value );
71 }
72 }