1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.millscript.office.spreadsheet.formula.syntax;
22
23 import org.millscript.millscript.expr.ConstantExpr;
24 import org.millscript.millscript.expr.Expr;
25 import org.millscript.millscript.syntax.BothfixSyntax;
26 import org.millscript.millscript.syntax.Parser;
27 import org.millscript.office.spreadsheet.formula.expr.AddExpr;
28 import org.millscript.office.spreadsheet.formula.expr.SubExpr;
29
30 /**
31 * This class implements arithmetic syntax. In some ways this is a variation of
32 * {@link InfixSyntax}, as the arithmetic operator sits between it's operands.
33 *
34 * <p>
35 * <code><expr> -- <expr></code>
36 * </p>
37 *
38 * @see AddExpr
39 */
40 public final class SubSyntax extends BothfixSyntax {
41
42 /**
43 * @see org.millscript.millscript.syntax.PostfixSyntaxInterface#postfix(java.lang.String, int, org.millscript.millscript.expr.Expr, org.millscript.millscript.syntax.Parser)
44 */
45 @Override
46 public Expr postfix( final String sym, final int prec, final Expr lhs, final Parser parser ) {
47
48 Expr rhs = parser.readExprPrec( prec );
49
50 return new SubExpr( lhs, rhs );
51 }
52
53 /**
54 * @see org.millscript.millscript.syntax.PrefixSyntaxInterface#prefix(java.lang.String, org.millscript.millscript.syntax.Parser)
55 */
56 @Override
57 public Expr prefix( final String sym, final Parser parser ) {
58
59 return new SubExpr(
60 new ConstantExpr( Integer.valueOf( 0 ) ),
61 parser.readExpr()
62 );
63 }
64
65 }