EMMA Coverage Report (generated Fri Feb 14 08:28:31 UTC 2014)
[all classes][org.qedeq.kernel.bo.parser]

COVERAGE SUMMARY FOR SOURCE FILE [Operator.java]

nameclass, %method, %block, %line, %
Operator.java100% (1/1)100% (18/18)88%  (239/272)95%  (54/57)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Operator100% (1/1)100% (18/18)88%  (239/272)95%  (54/57)
Operator (String, String, String, String, String, int, int, int, int): void 100% (1/1)58%  (45/78)83%  (15/18)
Operator (String, String, String, String, String, int, int): void 100% (1/1)100% (12/12)100% (2/2)
Operator (String, String, String, String, String, int, int, int): void 100% (1/1)100% (12/12)100% (2/2)
Operator (String, String, String, int, int, int): void 100% (1/1)100% (10/10)100% (2/2)
Operator (String, String, String, int, int, int, int): void 100% (1/1)100% (12/12)100% (2/2)
getEndSymbol (): String 100% (1/1)100% (3/3)100% (1/1)
getMax (): int 100% (1/1)100% (3/3)100% (1/1)
getMin (): int 100% (1/1)100% (3/3)100% (1/1)
getPriority (): int 100% (1/1)100% (3/3)100% (1/1)
getQedeq (): String 100% (1/1)100% (3/3)100% (1/1)
getQedeqArgument (): String 100% (1/1)100% (3/3)100% (1/1)
getSeparatorSymbol (): String 100% (1/1)100% (3/3)100% (1/1)
getStartSymbol (): String 100% (1/1)100% (3/3)100% (1/1)
isFunction (): boolean 100% (1/1)100% (8/8)100% (1/1)
isInfix (): boolean 100% (1/1)100% (7/7)100% (1/1)
isPostfix (): boolean 100% (1/1)100% (8/8)100% (1/1)
isPrefix (): boolean 100% (1/1)100% (12/12)100% (1/1)
toString (): String 100% (1/1)100% (89/89)100% (19/19)

1/* This file is part of the project "Hilbert II" - http://www.qedeq.org
2 *
3 * Copyright 2000-2014,  Michael Meyling <mime@qedeq.org>.
4 *
5 * "Hilbert II" is free software; you can redistribute
6 * it and/or modify it under the terms of the GNU General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15 
16package org.qedeq.kernel.bo.parser;
17 
18 
19/**
20 * This class describes an term or logical operator. An operator is of either
21 * prefix, infix or postfix type and has a minimum and maximum number of operands.
22 * It has a symbol or token that enables to recognize it and a QEDEQ representation.
23 * Each instance of this class is unique so two instances with the same parameters are
24 * different from each other.
25 *
26 * @author  Michael Meyling
27 */
28public final class Operator {
29 
30    /** Marks infix operator. */
31    public static final int INFIX = 0;
32 
33    /** Marks prefix operator. */
34    public static final int SIMPLE_PREFIX = 1;
35 
36    /** Marks postfix operator. */
37    public static final int POSTFIX = 2;
38 
39    /** Marks function operator. */
40    public static final int FUNCTION = 4;
41 
42    /** Prefix, function, infix or postfix. See {@link #SIMPLE_PREFIX}, {@link #FUNCTION},
43     * {@link #INFIX} and {@link #POSTFIX}. */
44    private final int type;
45 
46    /** Start symbol or token for this operator. */
47    private final String startSymbol;
48 
49    /** Separator symbol or token for this operator. This could be a comma for example. */
50    private final String separatorSymbol;
51 
52    /** End symbol or token for this operator. */
53    private final String endSymbol;
54 
55    /** Operator priority. Highest is 0. */
56    private final int priority;
57 
58    /** QEDEQ token for this operator. */
59    private final String qedeq;
60 
61    /** First QEDEQ argument. Can be <code>null</code>. */
62    private final String qedeqArgument;
63 
64    /** Minimum number of arguments. */
65    private final int min;
66 
67    /** Maximum number of arguments. */
68    private final int max;
69 
70 
71    /**
72     * Constructor.
73     *
74     * @param   symbol      Symbol or token for this operator.
75     * @param   qedeq       QEDEQ operator symbol.
76     * @param   qedeqArgument       First Argument in QEDEQ-Syntax - if any.
77     * @param   priority    Operator priority, highest is 0.
78     * @param   type        Prefix, infix or postfix. See {@link #SIMPLE_PREFIX}, {@link #FUNCTION},
79     *                      {@link #INFIX} and {@link #POSTFIX}.
80     * @param   min         Minimum number of arguments for this operator.
81     */
82    public Operator(final String symbol,
83             final String qedeq,
84             final String qedeqArgument,
85             final int priority,
86             final int type,
87             final int min) {
88        this(symbol, qedeq, qedeqArgument, priority, type, min, -1);
89    }
90 
91    /**
92     * Constructor.
93     *
94     * @param   symbol              Symbol or token for this operator.
95     * @param   qedeq               QEDEQ operator symbol.
96     * @param   qedeqArgument       First Argument in QEDEQ-Syntax - if any.
97     * @param   priority            Operator priority, highest is 0.
98     * @param   type                Prefix, infix or postfix. See {@link #SIMPLE_PREFIX},
99     *                              {@link #FUNCTION},
100     *                              {@link #INFIX} and {@link #POSTFIX}.
101     * @param   min                 Minimum number of arguments for this operator.
102     * @param   max                 Maximum number of arguments for this operator.
103     */
104    public Operator(final String symbol,
105             final String qedeq,
106             final String qedeqArgument,
107             final int priority,
108             final int type,
109             final int min,
110             final int max) {
111        this(symbol, null, null, qedeq, qedeqArgument, priority, type, min, max);
112    }
113 
114    /**
115     * Constructor for prefix operators like <code>{x | x > 0}</code>.
116     *
117     * @param   startSymbol         Starting symbol or token for this operator.
118     * @param   separatorSymbol     Symbol or token that separates arguments for this operator.
119     * @param   endSymbol           End symbol or token for this operator.
120     * @param   qedeq               QEDEQ operator symbol.
121     * @param   qedeqArgument       First Argument in QEDEQ-Syntax - if any
122     * @param   priority            Operator priority, highest is 0.
123     * @param   min                 Minimum number of arguments for this operator.
124     */
125    public Operator(final String startSymbol,
126             final String separatorSymbol,
127             final String endSymbol,
128             final String qedeq,
129             final String qedeqArgument,
130             final int priority,
131             final int min) {
132        this(startSymbol, separatorSymbol, endSymbol, qedeq, qedeqArgument, priority, SIMPLE_PREFIX,
133            min, -1);
134    }
135 
136    /**
137     * Constructor for prefix operators like <code>{x, y, z}</code>.
138     *
139     * @param   startSymbol         Starting symbol or token for this operator.
140     * @param   separatorSymbol     Symbol or token that separates arguments for this operator.
141     * @param   endSymbol           End symbol or token for this operator.
142     * @param   qedeq               QEDEQ operator symbol.
143     * @param   qedeqArgument       First Argument in QEDEQ-Syntax - if any.
144     * @param   priority            Operator priority, highest is 0.
145     * @param   min                 Minimum number of arguments for this operator.
146     * @param   max                 Maximum number of arguments for this operator.
147     */
148    public Operator(final String startSymbol,
149             final String separatorSymbol,
150             final String endSymbol,
151             final String qedeq,
152             final String qedeqArgument,
153             final int priority,
154             final int min,
155             final int max) {
156        this(startSymbol, separatorSymbol, endSymbol, qedeq, qedeqArgument, priority, SIMPLE_PREFIX,
157            min, max);
158    }
159 
160    /**
161     * Constructor.
162     *
163     * @param   startSymbol         Starting symbol or token for this operator.
164     * @param   separatorSymbol     Symbol or token that separates arguments for this operator.
165     * @param   endSymbol           End symbol or token for this operator.
166     * @param   qedeq               QEDEQ operator symbol.
167     * @param   qedeqArgument       First Argument in QEDEQ-Syntax - if any.
168     * @param   priority            Operator priority, highest is 0.
169     * @param   type                Prefix, infix or postfix. See {@link #SIMPLE_PREFIX},
170     *                              {@link #FUNCTION}, {@link #INFIX} and {@link #POSTFIX}.
171     * @param   min                 Minimum number of arguments for this operator.
172     * @param   max                 Maximum number of arguments for this operator.
173     */
174    public Operator(final String startSymbol, final String separatorSymbol, final String endSymbol,
175             final String qedeq,
176             final String qedeqArgument,
177             final int priority,
178             final int type,
179             final int min,
180             final int max) {
181        this.startSymbol = startSymbol;
182        this.separatorSymbol = separatorSymbol;
183        this.endSymbol = endSymbol;
184        this.type = type;
185        this.qedeq = qedeq;
186        this.qedeqArgument = qedeqArgument;
187        this.priority = priority;
188        this.min = min;
189        this.max = max;
190        switch (type) {
191            case INFIX:
192            case SIMPLE_PREFIX:
193            case FUNCTION:
194            case POSTFIX:
195                break;
196            default:
197                    throw new IllegalArgumentException("unknown operator type: "
198                        + type);
199        }
200        if (max != -1 && min > max) {
201            throw new IllegalArgumentException("Min greater than max: " + min + " > " + max);
202        }
203        if (isInfix() && min < 2) {
204            throw new IllegalArgumentException("Infix needs at least two arguments");
205        }
206    }
207 
208    /**
209     * Returns symbol or token to identify this operator.
210     *
211     * @return  Symbol or token to identify a start of this operator.
212     */
213    public final String getStartSymbol() {
214        return startSymbol;
215    }
216 
217    /**
218     * Returns symbol or token to separate different arguments for this operator. Can only be
219     * different from <code>null</code> if this is a prefix operator.
220     *
221     * @return  Symbol or token to identify the start of a new argument of this operator.
222     */
223    public String getSeparatorSymbol() {
224        return separatorSymbol;
225    }
226 
227    /**
228     * Returns symbol or token to identify the end of this operator. Can only be different from
229     * <code>null</code> if this is a prefix operator.
230     *
231     * @return  Symbol or token to identify the end of this operator. Maybe <code>null</code>.
232     */
233    public String getEndSymbol() {
234        return endSymbol;
235    }
236 
237    /**
238     * Is this an infix operator?
239     *
240     * @return  Is this an infix operator?
241     */
242    public final boolean isInfix() {
243        return type == INFIX;
244    }
245 
246    /**
247     * Is this a prefix operator?
248     *
249     * @return  Is this a prefix operator?
250     */
251    public final boolean isPrefix() {
252        return type == SIMPLE_PREFIX || type == FUNCTION;
253    }
254 
255    /**
256     * Is this a function operator?
257     *
258     * @return  Is this a function operator?
259     */
260    public final boolean isFunction() {
261        return type == FUNCTION;
262    }
263 
264    /**
265     * Is this a postfix operator?
266     *
267     * @return  Is this a postfix operator?
268     */
269    public final boolean isPostfix() {
270        return type == POSTFIX;
271    }
272 
273    /**
274     * Get operator priority. 0 is the highest priority.
275     *
276     * @return  Priority.
277     */
278    public final int getPriority() {
279        return this.priority;
280    }
281 
282    /**
283     * Get minimum argument number.
284     *
285     * @return  Minimum argument number.
286     */
287    public final int getMin() {
288        return this.min;
289    }
290 
291    /**
292     * Get maximum argument number.
293     *
294     * @return  Maximum argument number.
295     */
296    public final int getMax() {
297        return max;
298    }
299 
300    /**
301     * Get QEDEQ operator name.
302     *
303     * @return  QEDEQ operator name.
304     */
305    public final String getQedeq() {
306        return qedeq;
307    }
308 
309    /**
310     * Get first QEDEQ argument.
311     *
312     * @return  First QEDEQ argument. Can be <code>null</code>.
313     */
314    public final String getQedeqArgument() {
315        return qedeqArgument;
316    }
317 
318    public final String toString() {
319        final StringBuffer buffer = new StringBuffer(getStartSymbol());
320        buffer.append("[" + getMin() + ", ");
321        if (getMax() == -1) {
322            buffer.append("..");
323        } else {
324            buffer.append(getMax());
325        }
326        buffer.append("]");
327        if (getSeparatorSymbol() != null) {
328            buffer.append(" ").append(getSeparatorSymbol());
329        }
330        if (getEndSymbol() != null) {
331            buffer.append(" ").append(getEndSymbol());
332        }
333        if (isFunction()) {
334            buffer.append(", is function");
335        }
336        if (isPrefix()) {
337            buffer.append(", is prefix");
338        }
339        if (isInfix()) {
340            buffer.append(", is infix");
341        }
342        if (isPostfix()) {
343            buffer.append(", is postfix");
344        }
345        return buffer.toString();
346    }
347 
348}
349 

[all classes][org.qedeq.kernel.bo.parser]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov