Created an ast package for gridworks expression language abstract syntax tree nodes. Moved parsing exception class out to its own file.
git-svn-id: http://google-refine.googlecode.com/svn/trunk@156 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
983be19e14
commit
7c38fbb945
@ -10,7 +10,7 @@ import com.metaweb.gridworks.browsing.FilteredRows;
|
||||
import com.metaweb.gridworks.browsing.filters.ExpressionStringComparisonRowFilter;
|
||||
import com.metaweb.gridworks.browsing.filters.RowFilter;
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.VariableExpr;
|
||||
import com.metaweb.gridworks.expr.ast.VariableExpr;
|
||||
import com.metaweb.gridworks.model.Project;
|
||||
|
||||
public class TextSearchFacet implements Facet {
|
||||
|
@ -17,7 +17,7 @@ import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||
import com.metaweb.gridworks.expr.HasFields;
|
||||
import com.metaweb.gridworks.expr.Parser;
|
||||
import com.metaweb.gridworks.expr.Parser.ParserException;
|
||||
import com.metaweb.gridworks.expr.ParsingException;
|
||||
import com.metaweb.gridworks.model.Cell;
|
||||
import com.metaweb.gridworks.model.Project;
|
||||
import com.metaweb.gridworks.model.Row;
|
||||
@ -85,7 +85,7 @@ public class PreviewExpressionCommand extends Command {
|
||||
}
|
||||
}
|
||||
writer.endArray();
|
||||
} catch (ParserException e) {
|
||||
} catch (ParsingException e) {
|
||||
writer.key("code"); writer.value("error");
|
||||
writer.key("type"); writer.value("parser");
|
||||
writer.key("message"); writer.value(e.getMessage());
|
||||
|
@ -6,25 +6,23 @@ import java.util.List;
|
||||
import com.metaweb.gridworks.expr.Scanner.NumberToken;
|
||||
import com.metaweb.gridworks.expr.Scanner.Token;
|
||||
import com.metaweb.gridworks.expr.Scanner.TokenType;
|
||||
import com.metaweb.gridworks.expr.ast.ControlCallExpr;
|
||||
import com.metaweb.gridworks.expr.ast.FieldAccessorExpr;
|
||||
import com.metaweb.gridworks.expr.ast.FunctionCallExpr;
|
||||
import com.metaweb.gridworks.expr.ast.LiteralExpr;
|
||||
import com.metaweb.gridworks.expr.ast.OperatorCallExpr;
|
||||
import com.metaweb.gridworks.expr.ast.VariableExpr;
|
||||
|
||||
public class Parser {
|
||||
protected Scanner _scanner;
|
||||
protected Token _token;
|
||||
protected Evaluable _root;
|
||||
|
||||
static public class ParserException extends Exception {
|
||||
private static final long serialVersionUID = 155004505172098755L;
|
||||
|
||||
protected ParserException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
public Parser(String s) throws ParserException {
|
||||
public Parser(String s) throws ParsingException {
|
||||
this(s, 0, s.length());
|
||||
}
|
||||
|
||||
public Parser(String s, int from, int to) throws ParserException {
|
||||
public Parser(String s, int from, int to) throws ParsingException {
|
||||
_scanner = new Scanner(s, from, to);
|
||||
_token = _scanner.next();
|
||||
|
||||
@ -39,13 +37,13 @@ public class Parser {
|
||||
_token = _scanner.next();
|
||||
}
|
||||
|
||||
protected ParserException makeException(String desc) {
|
||||
protected ParsingException makeException(String desc) {
|
||||
int index = _token != null ? _token.start : _scanner.getIndex();
|
||||
|
||||
return new ParserException("Parsing error at offset " + index + ": " + desc);
|
||||
return new ParsingException("Parsing error at offset " + index + ": " + desc);
|
||||
}
|
||||
|
||||
protected Evaluable parseExpression() throws ParserException {
|
||||
protected Evaluable parseExpression() throws ParsingException {
|
||||
Evaluable sub = parseSubExpression();
|
||||
|
||||
while (_token != null &&
|
||||
@ -64,7 +62,7 @@ public class Parser {
|
||||
return sub;
|
||||
}
|
||||
|
||||
protected Evaluable parseSubExpression() throws ParserException {
|
||||
protected Evaluable parseSubExpression() throws ParsingException {
|
||||
Evaluable sub = parseTerm();
|
||||
|
||||
while (_token != null &&
|
||||
@ -83,7 +81,7 @@ public class Parser {
|
||||
return sub;
|
||||
}
|
||||
|
||||
protected Evaluable parseTerm() throws ParserException {
|
||||
protected Evaluable parseTerm() throws ParsingException {
|
||||
Evaluable factor = parseFactor();
|
||||
|
||||
while (_token != null &&
|
||||
@ -102,7 +100,7 @@ public class Parser {
|
||||
return factor;
|
||||
}
|
||||
|
||||
protected Evaluable parseFactor() throws ParserException {
|
||||
protected Evaluable parseFactor() throws ParsingException {
|
||||
if (_token == null) {
|
||||
throw makeException("Expression ends too early");
|
||||
}
|
||||
@ -207,7 +205,7 @@ public class Parser {
|
||||
return eval;
|
||||
}
|
||||
|
||||
protected List<Evaluable> parseExpressionList(String closingDelimiter) throws ParserException {
|
||||
protected List<Evaluable> parseExpressionList(String closingDelimiter) throws ParsingException {
|
||||
List<Evaluable> l = new LinkedList<Evaluable>();
|
||||
|
||||
if (_token != null &&
|
||||
|
@ -0,0 +1,16 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
package com.metaweb.gridworks.expr;
|
||||
|
||||
public class ParsingException extends Exception {
|
||||
private static final long serialVersionUID = 155004505172098755L;
|
||||
|
||||
public ParsingException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public ParsingException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
@ -1,7 +1,10 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.ast;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import com.metaweb.gridworks.expr.Control;
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
|
||||
public class ControlCallExpr implements Evaluable {
|
||||
final protected Evaluable[] _args;
|
||||
final protected Control _control;
|
@ -1,7 +1,12 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.ast;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import com.metaweb.gridworks.expr.EvalError;
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||
import com.metaweb.gridworks.expr.HasFields;
|
||||
|
||||
public class FieldAccessorExpr implements Evaluable {
|
||||
final protected Evaluable _inner;
|
||||
final protected String _fieldName;
|
@ -1,7 +1,11 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.ast;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||
import com.metaweb.gridworks.expr.Function;
|
||||
|
||||
public class FunctionCallExpr implements Evaluable {
|
||||
final protected Evaluable[] _args;
|
||||
final protected Function _function;
|
@ -1,9 +1,11 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.ast;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
|
||||
public class LiteralExpr implements Evaluable {
|
||||
final protected Object _value;
|
||||
|
@ -1,7 +1,10 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.ast;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||
|
||||
public class OperatorCallExpr implements Evaluable {
|
||||
final protected Evaluable[] _args;
|
||||
final protected String _op;
|
@ -1,7 +1,9 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.ast;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
|
||||
public class VariableExpr implements Evaluable {
|
||||
final protected String _name;
|
||||
|
@ -12,7 +12,7 @@ import com.metaweb.gridworks.expr.ControlFunctionRegistry;
|
||||
import com.metaweb.gridworks.expr.EvalError;
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||
import com.metaweb.gridworks.expr.VariableExpr;
|
||||
import com.metaweb.gridworks.expr.ast.VariableExpr;
|
||||
|
||||
public class ForEach implements Control {
|
||||
public String checkArguments(Evaluable[] args) {
|
||||
|
@ -9,7 +9,7 @@ import com.metaweb.gridworks.expr.Control;
|
||||
import com.metaweb.gridworks.expr.ControlFunctionRegistry;
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||
import com.metaweb.gridworks.expr.VariableExpr;
|
||||
import com.metaweb.gridworks.expr.ast.VariableExpr;
|
||||
|
||||
public class ForNonBlank implements Control {
|
||||
public String checkArguments(Evaluable[] args) {
|
||||
|
@ -8,7 +8,7 @@ import org.json.JSONWriter;
|
||||
import com.metaweb.gridworks.expr.Control;
|
||||
import com.metaweb.gridworks.expr.ControlFunctionRegistry;
|
||||
import com.metaweb.gridworks.expr.Evaluable;
|
||||
import com.metaweb.gridworks.expr.VariableExpr;
|
||||
import com.metaweb.gridworks.expr.ast.VariableExpr;
|
||||
|
||||
public class With implements Control {
|
||||
public String checkArguments(Evaluable[] args) {
|
||||
|
@ -5,9 +5,9 @@ import java.util.Properties;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
import com.metaweb.gridworks.expr.CalendarParser;
|
||||
import com.metaweb.gridworks.expr.CalendarParserException;
|
||||
import com.metaweb.gridworks.expr.Function;
|
||||
import com.metaweb.gridworks.expr.util.CalendarParser;
|
||||
import com.metaweb.gridworks.expr.util.CalendarParserException;
|
||||
|
||||
public class ToDate implements Function {
|
||||
|
||||
|
@ -7,9 +7,9 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
import com.metaweb.gridworks.expr.CalendarParser;
|
||||
import com.metaweb.gridworks.expr.CalendarParserException;
|
||||
import com.metaweb.gridworks.expr.Function;
|
||||
import com.metaweb.gridworks.expr.util.CalendarParser;
|
||||
import com.metaweb.gridworks.expr.util.CalendarParserException;
|
||||
|
||||
public class Diff implements Function {
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.util;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
@ -1,4 +1,4 @@
|
||||
package com.metaweb.gridworks.expr;
|
||||
package com.metaweb.gridworks.expr.util;
|
||||
|
||||
// Taken from http://icecube.wisc.edu/~dglo/software/calparse/index.html
|
||||
// Copyright Dave Glowacki. Released under the BSD license.
|
Loading…
Reference in New Issue
Block a user