Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Schaefer2003-02-11 18:10:40 +0000
committerDoug Schaefer2003-02-11 18:10:40 +0000
commitf6d742c5b5348012d559c1c61145cca093eb6069 (patch)
tree0db6e5c317cf21d2f97fe5691dc21e3e861adca7
parenta4aa1fbf6b5e8ec64c50b9556a3fb62d2b02e445 (diff)
downloadorg.eclipse.cdt-f6d742c5b5348012d559c1c61145cca093eb6069.tar.gz
org.eclipse.cdt-f6d742c5b5348012d559c1c61145cca093eb6069.tar.xz
org.eclipse.cdt-f6d742c5b5348012d559c1c61145cca093eb6069.zip
Able to parse "int x" into the DOM.
-rw-r--r--core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/DOMBuilder.java24
-rw-r--r--core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Declarator.java43
-rw-r--r--core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Name.java25
-rw-r--r--core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/IParserCallback.java5
-rw-r--r--core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/NullParserCallback.java14
-rw-r--r--core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/Parser.java18
-rw-r--r--core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/DOMTests.java7
-rw-r--r--core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/TestCallback.java14
8 files changed, 124 insertions, 26 deletions
diff --git a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/DOMBuilder.java b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
index bcf8294242f..83c3fd48a64 100644
--- a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
+++ b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/DOMBuilder.java
@@ -46,18 +46,24 @@ public class DOMBuilder implements IParserCallback {
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorBegin()
*/
public void declaratorBegin() {
+ SimpleDeclaration decl = (SimpleDeclaration)stack.peek();
+ Declarator declarator = new Declarator(decl);
+ decl.addDeclarator(declarator);
+ stack.push(declarator);
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorEnd()
*/
public void declaratorEnd() {
+ stack.pop();
}
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorId(org.eclipse.cdt.internal.core.newparser.Token)
*/
- public void declaratorId(Token id) {
+ public void declaratorId() {
+ ((Declarator)stack.peek()).setName(currName);
}
/**
@@ -212,4 +218,20 @@ public class DOMBuilder implements IParserCallback {
stack.pop();
}
+ private Name currName;
+
+ /**
+ * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.newparser.Token)
+ */
+ public void nameBegin(Token firstToken) {
+ currName = new Name(firstToken);
+ }
+
+ /**
+ * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameEnd(org.eclipse.cdt.internal.core.newparser.Token)
+ */
+ public void nameEnd(Token lastToken) {
+ currName.setEnd(lastToken);
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Declarator.java b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Declarator.java
index d30d8ce6807..e77bae47867 100644
--- a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Declarator.java
+++ b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Declarator.java
@@ -1,18 +1,45 @@
package org.eclipse.cdt.internal.core.dom;
-/**
- * @author dschaefe
- */
public class Declarator {
-
- private Name name;
- public void setName(Name name) {
- this.name = name;
+ public Declarator(SimpleDeclaration declaration) {
+ this.declaration = declaration;
}
+ private SimpleDeclaration declaration;
+
+ /**
+ * Returns the declaration.
+ * @return SimpleDeclaration
+ */
+ public SimpleDeclaration getDeclaration() {
+ return declaration;
+ }
+
+ /**
+ * Sets the declaration.
+ * @param declaration The declaration to set
+ */
+ public void setDeclaration(SimpleDeclaration declaration) {
+ this.declaration = declaration;
+ }
+
+ private Name name;
+
+ /**
+ * Returns the name.
+ * @return Name
+ */
public Name getName() {
return name;
}
-
+
+ /**
+ * Sets the name.
+ * @param name The name to set
+ */
+ public void setName(Name name) {
+ this.name = name;
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Name.java b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Name.java
index e948aac56ab..fd66b612bd4 100644
--- a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Name.java
+++ b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/dom/Name.java
@@ -1,7 +1,6 @@
package org.eclipse.cdt.internal.core.dom;
-import java.util.LinkedList;
-import java.util.List;
+import org.eclipse.cdt.internal.core.newparser.Token;
/**
* @author dschaefe
@@ -13,14 +12,24 @@ import java.util.List;
*/
public class Name {
- private List names = new LinkedList();
+ private Token nameStart, nameEnd;
- public void addName(String name) {
- names.add(name);
+ public Name(Token nameStart) {
+ this.nameStart = nameStart;
}
- public List getNames() {
- return names;
+ public void setEnd(Token nameEnd) {
+ this.nameEnd = nameEnd;
+ }
+
+ public String getName() {
+ String name = nameStart.getImage();
+
+ for (Token t = nameStart; nameStart != nameEnd;) {
+ t = nameStart.getNext();
+ name += t.getImage();
+ }
+
+ return name;
}
-
}
diff --git a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/IParserCallback.java b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/IParserCallback.java
index cedde096b29..c592c40ad5c 100644
--- a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/IParserCallback.java
+++ b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/IParserCallback.java
@@ -25,8 +25,11 @@ public interface IParserCallback {
public void simpleDeclSpecifier(Token specifier);
+ public void nameBegin(Token firstToken);
+ public void nameEnd(Token lastToken);
+
public void declaratorBegin();
- public void declaratorId(Token id);
+ public void declaratorId();
public void argumentsBegin();
public void argumentsEnd();
public void declaratorEnd();
diff --git a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/NullParserCallback.java b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/NullParserCallback.java
index 7215c66d655..9ce39d1acce 100644
--- a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/NullParserCallback.java
+++ b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/NullParserCallback.java
@@ -46,7 +46,7 @@ public class NullParserCallback implements IParserCallback {
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorId(Token)
*/
- public void declaratorId(Token id) {
+ public void declaratorId() {
}
/**
@@ -115,4 +115,16 @@ public class NullParserCallback implements IParserCallback {
public void macro(String macroName) {
}
+ /**
+ * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.newparser.Token)
+ */
+ public void nameBegin(Token firstToken) {
+ }
+
+ /**
+ * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameEnd(org.eclipse.cdt.internal.core.newparser.Token)
+ */
+ public void nameEnd(Token lastToken) {
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/Parser.java b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/Parser.java
index 1d3fd70bc8a..de5cf8e0f01 100644
--- a/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/Parser.java
+++ b/core/org.eclipse.cdt.core/newparser/org/eclipse/cdt/internal/core/newparser/Parser.java
@@ -286,17 +286,23 @@ c, quick);
* - Handle unqualifiedId
*/
public boolean name() throws Exception {
+ Token last = null;
+
+ callback.nameBegin(LA(1));
+
if (LT(1) == Token.tCOLONCOLON)
- consume();
+ last = consume();
- consume(Token.tIDENTIFIER);
+ last = consume(Token.tIDENTIFIER);
while (LT(1) == Token.tCOLONCOLON) {
- consume();
+ last = consume();
- consume(Token.tIDENTIFIER);
+ last = consume(Token.tIDENTIFIER);
}
-
+
+ callback.nameEnd(last);
+
return true;
}
@@ -359,8 +365,8 @@ c, quick);
return;
}
- callback.declaratorId(LA(1));
name();
+ callback.declaratorId();
for (;;) {
switch (LT(1)) {
diff --git a/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/DOMTests.java b/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/DOMTests.java
index 35a24558476..7bd9544fcef 100644
--- a/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/DOMTests.java
+++ b/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/DOMTests.java
@@ -3,6 +3,8 @@ package org.eclipse.cdt.core.parser.tests;
import java.util.List;
import org.eclipse.cdt.internal.core.dom.DOMBuilder;
+import org.eclipse.cdt.internal.core.dom.Declarator;
+import org.eclipse.cdt.internal.core.dom.Name;
import org.eclipse.cdt.internal.core.dom.SimpleDeclaration;
import org.eclipse.cdt.internal.core.dom.TranslationUnit;
import org.eclipse.cdt.internal.core.newparser.Parser;
@@ -24,5 +26,10 @@ public class DOMTests extends TestCase {
assertEquals(1, declarations.size());
SimpleDeclaration declaration = (SimpleDeclaration)declarations.get(0);
assertEquals(SimpleDeclaration.t_int, declaration.getDeclSpecifierSeq());
+ List declarators = declaration.getDeclarators();
+ assertEquals(1, declarators.size());
+ Declarator declarator = (Declarator)declarators.get(0);
+ Name name = declarator.getName();
+ assertEquals("x", name.getName());
}
}
diff --git a/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/TestCallback.java b/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/TestCallback.java
index 675eafbc621..eb4b0521d73 100644
--- a/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/TestCallback.java
+++ b/core/org.eclipse.cdt.ui.tests/newparser/org/eclipse/cdt/core/parser/tests/TestCallback.java
@@ -126,7 +126,7 @@ public class TestCallback extends Assert implements IParserCallback {
/**
* @see org.eclipse.cdt.internal.core.newparser.IParserCallback#declaratorId(org.eclipse.cdt.internal.core.newparser.Token)
*/
- public void declaratorId(Token id) {
+ public void declaratorId() {
fail();
}
@@ -202,4 +202,16 @@ public class TestCallback extends Assert implements IParserCallback {
validate(expressionTerminal, terminal.getImage());
}
+ /**
+ * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameBegin(org.eclipse.cdt.internal.core.newparser.Token)
+ */
+ public void nameBegin(Token firstToken) {
+ }
+
+ /**
+ * @see org.eclipse.cdt.internal.core.newparser.IParserCallback#nameEnd(org.eclipse.cdt.internal.core.newparser.Token)
+ */
+ public void nameEnd(Token lastToken) {
+ }
+
}

Back to the top