@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()); }
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; }