Package com.lastcalc.parsers.UserDefinedParserParser

Examples of com.lastcalc.parsers.UserDefinedParserParser.UserDefinedParser


    final ParserContext context = new ParserContext(st, Long.MAX_VALUE);
    final TokenList squareUDPtokens = st.parseAndGetLastStep(Tokenizer.tokenize("square X = X*X"), context);
    Assert.assertEquals(squareUDPtokens.toString() + " is of size 1", squareUDPtokens.size(), 1);
    Assert.assertTrue(squareUDPtokens.get(0) + " is a UserDefinedParser",
        squareUDPtokens.get(0) instanceof UserDefinedParser);
    final UserDefinedParser squareUDP = (UserDefinedParser) squareUDPtokens.get(0);
    Assert.assertEquals("Validate squareUDP template", TokenList.createD("square", Object.class),
        squareUDP.getTemplate());
    Assert.assertEquals("Validate squareUDP after", TokenList.createD("X", "*", "X"), squareUDP.after);
    priorityPPF.addParser(squareUDP);
    final TokenList quadUDPtokens = st.parseAndGetLastStep(Tokenizer.tokenize("quad X = square (square X)"),
        context);
    Assert.assertEquals(quadUDPtokens.toString() + " is of size 1", 1, quadUDPtokens.size());
    Assert.assertTrue(quadUDPtokens.get(0) + " is a UserDefinedParser",
        quadUDPtokens.get(0) instanceof UserDefinedParser);
    final UserDefinedParser quadUDP = (UserDefinedParser) quadUDPtokens.get(0);
    Assert.assertEquals("Validate quadUDP template", TokenList.createD("quad", Object.class),
        quadUDP.getTemplate());

    priorityPPF.addParser(quadUDP);
    final TokenList result = st.parseAndGetLastStep(Tokenizer.tokenize("quad 2"), context);
    Assert.assertEquals(result.toString() + " is of size 1", 1, result.size());
    Assert.assertEquals(16, ((org.jscience.mathematics.number.Number) result.get(0)).intValue());
View Full Code Here


    return answer;
  }

  public TokenList stripUDF(final TokenList answer) {
    if (answer.size() == 1 && answer.get(0) instanceof UserDefinedParser) {
      final UserDefinedParser udf = (UserDefinedParser) answer.get(0);
      if (udf.variables.isEmpty()) {
        final TokenList parsedResult = parseEngine.parseAndGetLastStep(udf.after, context);
        if (parsedResult.size() == 1)
          return parsedResult;
      }
View Full Code Here

    return parseEngine.parseAndGetLastStep(question, context);
  }

  public void processNextAnswer(final TokenList answer) {
    if (answer.size() == 1 && answer.get(0) instanceof UserDefinedParser) {
      final UserDefinedParser udp = (UserDefinedParser) answer.get(0);

      if (udp.getTemplate().size() == 1 && udp.getTemplate().get(0) instanceof String) {
        final String keyword = (String) udp.getTemplate().get(0);
        if (!PreParser.reserved.contains(keyword) && !userDefinedKeywords.containsKey(keyword)) {
          userDefinedKeywords.put(keyword, pos + 1);
        }
      }
      userDefinedParsers.addParser(udp);
View Full Code Here

        if (o1 instanceof UserDefinedParser && !(o2 instanceof UserDefinedParser))
          return -1;
        else if (o2 instanceof UserDefinedParser && !(o1 instanceof UserDefinedParser))
          return 1;
        else if (o1 instanceof UserDefinedParser && o2 instanceof UserDefinedParser) {
          final UserDefinedParser udp1 = (UserDefinedParser) o1;
          final UserDefinedParser udp2 = (UserDefinedParser) o2;
          final int sizeRed1 = udp1.after.size() - udp1.getTemplate().size();
          final int sizeRed2 = udp2.after.size() - udp2.getTemplate().size();
          return compareInts(sizeRed1, sizeRed2, compareInts(o1.hashCode(), o2.hashCode(), 0));
        }
        else
          return compareInts(o1.hashCode(), o2.hashCode(), 0);
      }
View Full Code Here

  private static TokenList template = TokenList.createD("filter", Lists.newArrayList(List.class), "with",
      UserDefinedParser.class);

  @Override
  public ParseResult parse(final TokenList tokens, final int templatePos, final ParserContext context) {
    final UserDefinedParser udp = (UserDefinedParser) tokens.get(templatePos + 3);
    final Object datastructure = tokens.get(templatePos + 1);
    List<Object> ret;
    if (datastructure instanceof List) {
      if (udp.variables.size() != 1 || udp.getTemplate().size() != 1)
        return ParseResult.fail();
      final List<Object> list = (List<Object>) datastructure;
      ret = Lists.newArrayListWithCapacity(list.size() * 4);
      ret.add("[");
      for (final Object o : list) {
        final TokenList result = context.parseEngine.parseAndGetLastStep(
            udp.parse(TokenList.createD(o), 0).output, context);
        if (result.size() != 1 || !(result.get(0) instanceof Boolean))
          return ParseResult.fail();
        if (result.get(0).equals(true)) {
          ret.add(o);
          ret.add(",");
View Full Code Here

      Object.class);

  @Override
  public ParseResult parse(final TokenList tokens, final int templatePos, final ParserContext context) {
    Object ret = tokens.get(templatePos + 5);
    final UserDefinedParser udp = (UserDefinedParser) tokens.get(templatePos + 1);
    final Object datastructure = tokens.get(templatePos + 3);
    if (datastructure instanceof List) {
      if (udp.getTemplate().size() != 2)
        return ParseResult.fail();
      final List<Object> list = (List<Object>) datastructure;
      for (final Object o : list) {
        TokenList r = udp.parse(TokenList.createD(ret, o), 0).output;
        r = context.parseEngine.parseAndGetLastStep(r, context);
        if (r.size() != 1)
          return ParseResult.fail();
        else {
          ret = r.get(0);
View Full Code Here

  }

  public boolean isMinimal() {
    if (result.output.size() == 1 && !(result.output.get(0) instanceof String)) {
      if (result.output.get(0) instanceof UserDefinedParser) {
        final UserDefinedParser udp = (UserDefinedParser) result.output.get(0);
        // Handle a common case
        if (udp.getTemplate().indexOf("if") != -1)
          return false;
        else
          return true;
      } else
        return true;
View Full Code Here

    return template;
  }

  @Override
  public ParseResult parse(final TokenList tokens, final int templatePos, final ParserContext context) {
    final UserDefinedParser function = (UserDefinedParser) tokens.get(templatePos + 1);
    if (2 + templatePos + function.getTemplate().size() > tokens.size())
      return ParseResult.fail();
    final TokenList input = tokens.subList(templatePos + 3, templatePos + 3 + function.getTemplate().size());
    if (function.matchTemplate(input) != 0)
      return ParseResult.fail();
    final ParseResult parse = function.parse(input, 0, context);
    if (parse.isSuccess())
      return ParseResult.success(tokens.replaceWithTokenList(templatePos, templatePos + 3
          + function.getTemplate().size(), parse.output));
    else
      return ParseResult.fail();
  }
View Full Code Here

  private static TokenList template = TokenList.createD("apply", UserDefinedParser.class, "to",
      Lists.newArrayList(List.class, Map.class));

  @Override
  public ParseResult parse(final TokenList tokens, final int templatePos, final ParserContext context) {
    final UserDefinedParser udp = (UserDefinedParser) tokens.get(templatePos + 1);
    final Object datastructure = tokens.get(templatePos + 3);
    List<Object> ret;
    if (datastructure instanceof List) {
      if (udp.variables.size() != 1 || udp.getTemplate().size() != 1)
        return ParseResult.fail();
      final List<Object> list = (List<Object>) datastructure;
      ret = Lists.newArrayListWithCapacity(list.size() * 4);
      ret.add("[");
      for (final Object o : list) {
        final TokenList r = context.parseEngine.parseAndGetLastStep(udp.parse(TokenList.createD(o), 0).output,
            context);
        Iterables.addAll(ret, r);
        ret.add(",");
      }
      ret.set(ret.size() - 1, "]"); // Overwrite last comma
View Full Code Here

TOP

Related Classes of com.lastcalc.parsers.UserDefinedParserParser.UserDefinedParser

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.