コード例 #1
0
  @Test
  public void testFindNextCharSequence() {
    final VariableParser parser = new VariableParser(new Interval[0]);

    // double v
    parser.findNext(this._source);
    Assert.assertTrue(parser.hasFoundElement());
    Assert.assertEquals("double v;", parser.getLastFoundStatement());
    VariableNode lastFoundAsNode = parser.getLastFoundAsNode();
    Assert.assertEquals(VariableNode.class, lastFoundAsNode.getClass());
    Assert.assertEquals("v", lastFoundAsNode.getSourceIdentifier());
    Assert.assertEquals("double", lastFoundAsNode.getTypeName());
    Assert.assertTrue(lastFoundAsNode.hasOffsets());
    Assert.assertEquals(29, lastFoundAsNode.getStatementStartOffset());
    Assert.assertEquals(37, lastFoundAsNode.getStatementEndOffset());

    Assert.assertEquals(parser.getEndOffsetLastFound(), lastFoundAsNode.getStatementEndOffset());

    // long l
    parser.findNext(this._source, parser.getEndOffsetLastFound());
    Assert.assertTrue(parser.hasFoundElement());
    Assert.assertEquals("long l;", parser.getLastFoundStatement());
    lastFoundAsNode = parser.getLastFoundAsNode();
    Assert.assertEquals(VariableNode.class, lastFoundAsNode.getClass());
    Assert.assertEquals("l", lastFoundAsNode.getSourceIdentifier());
    Assert.assertEquals("long", lastFoundAsNode.getTypeName());
    Assert.assertTrue(lastFoundAsNode.hasOffsets());
    Assert.assertEquals(82, lastFoundAsNode.getStatementStartOffset());
    Assert.assertEquals(88, lastFoundAsNode.getStatementEndOffset());

    // char text[40]
    parser.findNext(this._source, parser.getEndOffsetLastFound());
    Assert.assertTrue(parser.hasFoundElement());
    Assert.assertEquals("char text[40];", parser.getLastFoundStatement());
    lastFoundAsNode = parser.getLastFoundAsNode();
    Assert.assertEquals(VariableNode.class, lastFoundAsNode.getClass());
    Assert.assertEquals("text", lastFoundAsNode.getSourceIdentifier());
    Assert.assertEquals("char", lastFoundAsNode.getTypeName());
    Assert.assertTrue(lastFoundAsNode.hasOffsets());
    Assert.assertEquals(91, lastFoundAsNode.getStatementStartOffset());
    Assert.assertEquals(104, lastFoundAsNode.getStatementEndOffset());

    // char text_Neu
    parser.findNext(this._source, parser.getEndOffsetLastFound());
    Assert.assertTrue(parser.hasFoundElement());
    Assert.assertEquals("char text_Neu;", parser.getLastFoundStatement());
    lastFoundAsNode = parser.getLastFoundAsNode();
    Assert.assertEquals(VariableNode.class, lastFoundAsNode.getClass());
    Assert.assertEquals("text_Neu", lastFoundAsNode.getSourceIdentifier());
    Assert.assertEquals("char", lastFoundAsNode.getTypeName());
    Assert.assertTrue(lastFoundAsNode.hasOffsets());
    Assert.assertEquals(106, lastFoundAsNode.getStatementStartOffset());
    Assert.assertEquals(119, lastFoundAsNode.getStatementEndOffset());

    // char text2[40]
    parser.findNext(this._source, parser.getEndOffsetLastFound());
    Assert.assertTrue(parser.hasFoundElement());
    Assert.assertEquals("char text2 [40] ;", parser.getLastFoundStatement());
    lastFoundAsNode = parser.getLastFoundAsNode();
    Assert.assertEquals(VariableNode.class, lastFoundAsNode.getClass());
    Assert.assertEquals("text2", lastFoundAsNode.getSourceIdentifier());
    Assert.assertEquals("char", lastFoundAsNode.getTypeName());
    Assert.assertTrue(lastFoundAsNode.hasOffsets());
    Assert.assertEquals(121, lastFoundAsNode.getStatementStartOffset());
    Assert.assertEquals(137, lastFoundAsNode.getStatementEndOffset());

    // char text3[40]
    parser.findNext(this._source, parser.getEndOffsetLastFound());
    Assert.assertTrue(parser.hasFoundElement());
    Assert.assertEquals("char text3[ 40 ];", parser.getLastFoundStatement());
    lastFoundAsNode = parser.getLastFoundAsNode();
    Assert.assertEquals(VariableNode.class, lastFoundAsNode.getClass());
    Assert.assertEquals("text3", lastFoundAsNode.getSourceIdentifier());
    Assert.assertEquals("char", lastFoundAsNode.getTypeName());
    Assert.assertTrue(lastFoundAsNode.hasOffsets());
    Assert.assertEquals(139, lastFoundAsNode.getStatementStartOffset());
    Assert.assertEquals(155, lastFoundAsNode.getStatementEndOffset());
  }
コード例 #2
0
ファイル: ExpressionParser.java プロジェクト: KukaTails/tpsc
  private ICodeNode parseIdentifier(Token token) throws Exception {
    ICodeNode rootNode = null;

    // Look up the identifier in the symbol table stack.
    // Flag the identifier as undefined if it's not found.
    String name = token.getText().toLowerCase();
    SymTabEntry id = symTabStack.lookup(name);

    // Undefined.
    if (id == null) {
      errorHandler.flag(token, IDENTIFIER_UNDEFINED, this);
      id = symTabStack.enterLocal(name);
      id.setDefinition(UNDEFINED);
      id.setTypeSpec(Predefined.undefinedType);
    }

    Definition defnCode = id.getDefinition();
    switch ((DefinitionImpl) defnCode) {
      case CONSTANT:
        {
          Object value = id.getAttribute(CONSTANT_VALUE);
          TypeSpec type = id.getTypeSpec();

          if (value instanceof Integer) {
            rootNode = ICodeFactory.createICodeNode(INTEGER_CONSTANT);
            rootNode.setAttribute(VALUE, value);
          } else if (value instanceof Float) {
            rootNode = ICodeFactory.createICodeNode(REAL_CONSTANT);
            rootNode.setAttribute(VALUE, value);
          } else if (value instanceof String) {
            rootNode = ICodeFactory.createICodeNode(STRING_CONSTANT);
            rootNode.setAttribute(VALUE, value);
          }

          id.appendLineNumber(token.getLineNumber());
          token = nextToken(); // consume the constant identifier

          if (rootNode != null) {
            rootNode.setTypeSpec(type);
          }

          break;
        }

      case ENUMERATION_CONSTANT:
        {
          Object value = id.getAttribute(CONSTANT_VALUE);
          TypeSpec type = id.getTypeSpec();

          rootNode = ICodeFactory.createICodeNode(INTEGER_CONSTANT);
          rootNode.setAttribute(VALUE, value);

          id.appendLineNumber(token.getLineNumber());
          token = nextToken(); // consume the enum constant identifier

          rootNode.setTypeSpec(type);
          break;
        }

      case FUNCTION:
        {
          CallParser callParser = new CallParser(this);
          rootNode = callParser.parse(token);
          break;
        }
      default:
        {
          VariableParser variableParser = new VariableParser(this);
          rootNode = variableParser.parse(token, id);
          break;
        }
    }
    return rootNode;
  }