X-Git-Url: http://secure.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/test/PHPParser.jj b/net.sourceforge.phpeclipse/src/test/PHPParser.jj
index 2b4a1e9..00cc6c9 100644
--- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj
+++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj
@@ -29,7 +29,6 @@ import org.eclipse.ui.texteditor.MarkerUtilities;
import org.eclipse.jface.preference.IPreferenceStore;
import java.util.Hashtable;
-import java.util.Enumeration;
import java.util.ArrayList;
import java.io.StringReader;
import java.io.*;
@@ -188,31 +187,6 @@ public final class PHPParser extends PHPParserSuperclass {
}
}
- /**
- * Create markers according to the external parser output
- */
- private static void createMarkers(final String output, final IFile file) throws CoreException {
- // delete all markers
- file.deleteMarkers(IMarker.PROBLEM, false, 0);
-
- int indx = 0;
- int brIndx;
- boolean flag = true;
- while ((brIndx = output.indexOf("
", indx)) != -1) {
- // newer php error output (tested with 4.2.3)
- scanLine(output, file, indx, brIndx);
- indx = brIndx + 6;
- flag = false;
- }
- if (flag) {
- while ((brIndx = output.indexOf("
", indx)) != -1) {
- // older php error output (tested with 4.2.3)
- scanLine(output, file, indx, brIndx);
- indx = brIndx + 4;
- }
- }
- }
-
private static void scanLine(final String output,
final IFile file,
final int indx,
@@ -302,6 +276,25 @@ public final class PHPParser extends PHPParserSuperclass {
pushOnAstNodes(new HTMLCode(chars, htmlStart,currentPosition));
}
+ /**
+ * Create a new task.
+ */
+ public static final void createNewTask() {
+ final int currentPosition = SimpleCharStream.getPosition();
+ final String todo = SimpleCharStream.currentBuffer.substring(currentPosition+1,
+ SimpleCharStream.currentBuffer.indexOf("\n",
+ currentPosition)-1);
+ try {
+ setMarker(fileToParse,
+ "todo : " + todo,
+ SimpleCharStream.getBeginLine(),
+ TASK,
+ "Line "+SimpleCharStream.getBeginLine());
+ } catch (CoreException e) {
+ PHPeclipsePlugin.log(e);
+ }
+ }
+
private static final void parse() throws ParseException {
phpFile();
}
@@ -342,34 +335,30 @@ PARSER_END(PHPParser)
SPECIAL_TOKEN :
{
"//" : IN_SINGLE_LINE_COMMENT
-|
- "#" : IN_SINGLE_LINE_COMMENT
-|
- <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
-|
- "/*" : IN_MULTI_LINE_COMMENT
+| "#" : IN_SINGLE_LINE_COMMENT
+| <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
+| "/*" : IN_MULTI_LINE_COMMENT
}
SPECIAL_TOKEN :
{
: PHPPARSING
+| "?>" : DEFAULT
}
- SPECIAL_TOKEN :
+ SPECIAL_TOKEN :
{
- " > : DEFAULT
+ "todo" {PHPParser.createNewTask();}
}
-
-SPECIAL_TOKEN :
+ SPECIAL_TOKEN :
{
- : PHPPARSING
+ "*/" : PHPPARSING
}
-
-SPECIAL_TOKEN :
+ SPECIAL_TOKEN :
{
- : PHPPARSING
+ "*/" : PHPPARSING
}
@@ -467,8 +456,8 @@ MORE :
{
|
-|
-|
+|
+|
|
|
|
@@ -606,7 +595,7 @@ MORE :
TOKEN :
{
- < DOLLAR_ID: >
+ >
}
void phpFile() :
@@ -614,7 +603,7 @@ void phpFile() :
{
try {
(PhpBlock())*
-
+ {PHPParser.createNewHTMLCode();}
} catch (TokenMgrError e) {
PHPeclipsePlugin.log(e);
errorStart = SimpleCharStream.getPosition();
@@ -776,8 +765,8 @@ void ClassBodyDeclaration(ClassDeclaration classDeclaration) :
FieldDeclaration field;
}
{
- method = MethodDeclaration() {method.setParent(classDeclaration);}
-| field = FieldDeclaration()
+ method = MethodDeclaration() {classDeclaration.addMethod(method);}
+| field = FieldDeclaration() {classDeclaration.addField(field);}
}
/**
@@ -793,12 +782,10 @@ FieldDeclaration FieldDeclaration() :
{
variableDeclaration = VariableDeclarator()
{arrayList.add(variableDeclaration);
- outlineInfo.addVariable(new String(variableDeclaration.name));
- currentSegment.add(variableDeclaration);}
+ outlineInfo.addVariable(new String(variableDeclaration.name));}
( variableDeclaration = VariableDeclarator()
{arrayList.add(variableDeclaration);
- outlineInfo.addVariable(new String(variableDeclaration.name));
- currentSegment.add(variableDeclaration);}
+ outlineInfo.addVariable(new String(variableDeclaration.name));}
)*
try {
@@ -859,22 +846,26 @@ VariableDeclaration VariableDeclarator() :
String VariableDeclaratorId() :
{
String expr;
- Expression expression;
+ Expression expression = null;
final StringBuffer buff = new StringBuffer();
final int pos = SimpleCharStream.getPosition();
ConstantIdentifier ex;
}
{
try {
- expr = Variable() {buff.append(expr);}
+ expr = Variable()
( LOOKAHEAD(2)
{ex = new ConstantIdentifier(expr.toCharArray(),
pos,
SimpleCharStream.getPosition());}
expression = VariableSuffix(ex)
- {buff.append(expression.toStringExpression());}
)*
- {return buff.toString();}
+ {
+ if (expression == null) {
+ return expr;
+ }
+ return expression.toStringExpression();
+ }
} catch (ParseException e) {
errorMessage = "'$' expected for variable identifier";
errorLevel = ERROR;
@@ -884,6 +875,10 @@ String VariableDeclaratorId() :
}
}
+/**
+ * Return a variablename without the $.
+ * @return a variable name
+ */
String Variable():
{
final StringBuffer buff;
@@ -905,7 +900,7 @@ String Variable():
}
|
expr = VariableName()
- {return "$" + expr;}
+ {return expr;}
}
/**
@@ -1019,6 +1014,7 @@ MethodDeclaration MethodDeclaration() :
{
final MethodDeclaration functionDeclaration;
final Block block;
+ final OutlineableWithChildren seg = currentSegment;
}
{
@@ -1033,20 +1029,11 @@ MethodDeclaration MethodDeclaration() :
errorEnd = SimpleCharStream.getPosition() + 1;
throw e;
}
- {
- if (currentSegment != null) {
- currentSegment.add(functionDeclaration);
- currentSegment = functionDeclaration;
- }
- }
+ {currentSegment = functionDeclaration;}
block = Block()
- {
- functionDeclaration.statements = block.statements;
- if (currentSegment != null) {
- currentSegment = (OutlineableWithChildren) currentSegment.getParent();
- }
- return functionDeclaration;
- }
+ {functionDeclaration.statements = block.statements;
+ currentSegment = seg;
+ return functionDeclaration;}
}
/**
@@ -1076,11 +1063,11 @@ MethodDeclaration MethodDeclarator() :
}
formalParameters = FormalParameters()
{return new MethodDeclaration(currentSegment,
- identifierChar,
- formalParameters,
- reference != null,
- pos,
- SimpleCharStream.getPosition());}
+ identifierChar,
+ formalParameters,
+ reference != null,
+ pos,
+ SimpleCharStream.getPosition());}
}
/**
@@ -1100,7 +1087,7 @@ Hashtable FormalParameters() :
errorLevel = ERROR;
errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
errorEnd = SimpleCharStream.getPosition() + 1;
- throw e;
+ processParseException(e);
}
[ var = FormalParameter()
{parameters.put(new String(var.name),var);}
@@ -1116,7 +1103,7 @@ Hashtable FormalParameters() :
errorLevel = ERROR;
errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
errorEnd = SimpleCharStream.getPosition() + 1;
- throw e;
+ processParseException(e);
}
{return parameters;}
}
@@ -1181,7 +1168,7 @@ Expression Expression() :
VarAssignation varAssignation() :
{
String varName;
- final Expression expression;
+ final Expression initializer;
final int assignOperator;
final int pos = SimpleCharStream.getPosition();
}
@@ -1189,7 +1176,7 @@ VarAssignation varAssignation() :
varName = VariableDeclaratorId()
assignOperator = AssignmentOperator()
try {
- expression = Expression()
+ initializer = Expression()
} catch (ParseException e) {
if (errorMessage != null) {
throw e;
@@ -1201,7 +1188,7 @@ VarAssignation varAssignation() :
throw e;
}
{return new VarAssignation(varName.toCharArray(),
- expression,
+ initializer,
assignOperator,
pos,
SimpleCharStream.getPosition());}
@@ -1493,8 +1480,8 @@ final int operator;
final int pos = SimpleCharStream.getPosition();
}
{
- ( {operator = OperatorIds.PLUS_PLUS;}
- | {operator = OperatorIds.MINUS_MINUS;})
+ ( {operator = OperatorIds.PLUS_PLUS;}
+ | {operator = OperatorIds.MINUS_MINUS;})
expr = PrimaryExpression()
{return new PrefixedUnaryExpression(expr,operator,pos);}
}
@@ -1545,8 +1532,8 @@ Expression PostfixExpression() :
}
{
expr = PrimaryExpression()
- [ {operator = OperatorIds.PLUS_PLUS;}
- | {operator = OperatorIds.MINUS_MINUS;}]
+ [ {operator = OperatorIds.PLUS_PLUS;}
+ | {operator = OperatorIds.MINUS_MINUS;}]
{
if (operator == -1) {
return expr;
@@ -1580,6 +1567,11 @@ Expression PrimaryExpression() :
{return expr;}
}
+/**
+ * An array declarator.
+ * array(vars)
+ * @return an array
+ */
ArrayInitializer ArrayDeclarator() :
{
final ArrayVariableDeclaration[] vars;
@@ -1604,9 +1596,10 @@ Expression PrimaryPrefix() :
| expr = ClassIdentifier() {return new PrefixedUnaryExpression(expr,
OperatorIds.NEW,
pos);}
-| var = VariableDeclaratorId() {return new ConstantIdentifier(var.toCharArray(),
- pos,
- SimpleCharStream.getPosition());}
+| var = VariableDeclaratorId() {return new VariableDeclaration(currentSegment,
+ var.toCharArray(),
+ pos,
+ SimpleCharStream.getPosition());}
}
PrefixedUnaryExpression classInstantiation() :
@@ -1839,7 +1832,7 @@ HTMLBlock htmlBlock() :
try {
( | )
} catch (ParseException e) {
- errorMessage = "End of file unexpected, ' {return new PostfixedUnaryExpression(expr,
+ [ {return new PostfixedUnaryExpression(expr,
OperatorIds.PLUS_PLUS,
SimpleCharStream.getPosition());}
- | {return new PostfixedUnaryExpression(expr,
+ | {return new PostfixedUnaryExpression(expr,
OperatorIds.MINUS_MINUS,
SimpleCharStream.getPosition());}
| operator = AssignmentOperator() expr2 = Expression()
@@ -2753,9 +2749,9 @@ ForStatement ForStatement() :
{
final Token token;
final int pos = SimpleCharStream.getPosition();
-Statement[] initializations = null;
+Expression[] initializations = null;
Expression condition = null;
-Statement[] increments = null;
+Expression[] increments = null;
Statement action;
final ArrayList list = new ArrayList();
final int startBlock, endBlock;
@@ -2819,31 +2815,31 @@ final int startBlock, endBlock;
)
}
-Statement[] ForInit() :
+Expression[] ForInit() :
{
- Statement[] statements;
+ Expression[] exprs;
}
{
LOOKAHEAD(LocalVariableDeclaration())
- statements = LocalVariableDeclaration()
- {return statements;}
+ exprs = LocalVariableDeclaration()
+ {return exprs;}
|
- statements = StatementExpressionList()
- {return statements;}
+ exprs = StatementExpressionList()
+ {return exprs;}
}
-Statement[] StatementExpressionList() :
+Expression[] StatementExpressionList() :
{
final ArrayList list = new ArrayList();
- Statement expr;
+ Expression expr;
}
{
expr = StatementExpression() {list.add(expr);}
( StatementExpression() {list.add(expr);})*
{
- Statement[] stmtsArray = new Statement[list.size()];
- list.toArray(stmtsArray);
- return stmtsArray;}
+ Expression[] exprsArray = new Expression[list.size()];
+ list.toArray(exprsArray);
+ return exprsArray;}
}
Continue ContinueStatement() :