Search in sources :

Example 1 with ExprFunction

use of org.csstudio.autocomplete.parser.engine.expr.ExprFunction in project yamcs-studio by yamcs.

the class ContentParserHelper method parseStandardFunction.

/**
 * @return {@link FunctionDescriptor} filled from the content.
 */
public static FunctionDescriptor parseStandardFunction(String content) {
    FunctionDescriptor token = new FunctionDescriptor();
    if (content == null || content.isEmpty())
        return token;
    ExprFunction function = null;
    try {
        Expr e = ExprParser.parse(content);
        if (e == null)
            return token;
        else if (e.type == ExprType.Function)
            function = (ExprFunction) e;
        else if (e.type == ExprType.Variable) {
            function = new ExprFunction(((ExprVariable) e).getName(), null);
        }
    } catch (IOException | ExprException e) {
        AutoCompletePlugin.getLogger().log(Level.SEVERE, "Failed to parse function \"" + content + "\": " + e.getMessage());
    }
    if (function == null)
        return token;
    token.setValue(content);
    token.setFunctionName(function.getName());
    if (function.getArgs() != null) {
        token.setOpenBracket(true);
        token.setCurrentArgIndex(function.size() > 0 ? function.size() - 1 : 0);
        for (Expr e : function.getArgs()) {
            switch(e.type) {
                case Boolean:
                    token.addArgument(((ExprBoolean) e).value);
                    break;
                case Double:
                    token.addArgument(((ExprDouble) e).value);
                    break;
                case Integer:
                    token.addArgument(((ExprInteger) e).value);
                    break;
                case String:
                    token.addArgument(((ExprString) e).str);
                    break;
                default:
                    // ignore other types
                    token.addArgument(new Object());
                    break;
            }
        }
    }
    token.setComplete(function.isComplete());
    return token;
}
Also used : ExprException(org.csstudio.autocomplete.parser.engine.expr.ExprException) Expr(org.csstudio.autocomplete.parser.engine.expr.Expr) ExprFunction(org.csstudio.autocomplete.parser.engine.expr.ExprFunction) IOException(java.io.IOException) ExprVariable(org.csstudio.autocomplete.parser.engine.expr.ExprVariable)

Example 2 with ExprFunction

use of org.csstudio.autocomplete.parser.engine.expr.ExprFunction in project yamcs-studio by yamcs.

the class ExprParser method parseFunction.

private void parseFunction(ExprToken token, ExprLexer lexer) throws ExprException, IOException {
    Expr c = current;
    current = null;
    ExprToken e = null;
    ArrayList<Expr> args = new ArrayList<Expr>();
    boolean complete = false;
    while ((e = lexer.next()) != null) {
        if (e.type.equals(ExprTokenType.Comma)) {
            if ((e = lexer.next()) != null) {
                current = null;
                parseToken(lexer, e);
                args.add(current == null ? new ExprMissing() : current);
            } else {
                args.add(new ExprMissing());
            }
        } else if (e.type.equals(ExprTokenType.CloseBracket)) {
            // end
            complete = true;
            current = c;
            break;
        } else {
            // first arg
            parseToken(lexer, e);
            args.add(current == null ? new ExprMissing() : current);
        }
    }
    ExprFunction f = new ExprFunction(token.val, (Expr[]) args.toArray(new Expr[0]));
    f.setComplete(complete);
    setValue(f);
}
Also used : Expr(org.csstudio.autocomplete.parser.engine.expr.Expr) ExprFunction(org.csstudio.autocomplete.parser.engine.expr.ExprFunction) ArrayList(java.util.ArrayList) ExprMissing(org.csstudio.autocomplete.parser.engine.expr.ExprMissing)

Aggregations

Expr (org.csstudio.autocomplete.parser.engine.expr.Expr)2 ExprFunction (org.csstudio.autocomplete.parser.engine.expr.ExprFunction)2 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 ExprException (org.csstudio.autocomplete.parser.engine.expr.ExprException)1 ExprMissing (org.csstudio.autocomplete.parser.engine.expr.ExprMissing)1 ExprVariable (org.csstudio.autocomplete.parser.engine.expr.ExprVariable)1