mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 17:05:26 +02:00
optimizations to C99 preprocessor, new token classes, changed the interface to the token comparator, some code has been ported to java 5
This commit is contained in:
parent
44f817a54b
commit
b44e94c0e1
1 changed files with 42 additions and 30 deletions
|
@ -11,55 +11,67 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.dom.parser.upc;
|
package org.eclipse.cdt.internal.core.dom.parser.upc;
|
||||||
|
|
||||||
|
import static org.eclipse.cdt.core.dom.parser.c99.PPToken.*;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.c99.IPPTokenComparator;
|
import org.eclipse.cdt.core.dom.c99.IPPTokenComparator;
|
||||||
import org.eclipse.cdt.core.dom.parser.c99.IToken;
|
import org.eclipse.cdt.core.dom.parser.c99.IToken;
|
||||||
import org.eclipse.cdt.core.dom.parser.c99.PPToken;
|
import org.eclipse.cdt.core.dom.parser.c99.PPToken;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.c99.C99Parsersym;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.c99.preprocessor.SynthesizedToken;
|
||||||
|
import org.eclipse.cdt.internal.core.dom.parser.c99.preprocessor.Token;
|
||||||
|
|
||||||
public class UPCPPTokenComparator implements IPPTokenComparator {
|
public class UPCPPTokenComparator implements IPPTokenComparator {
|
||||||
|
|
||||||
public boolean compare(PPToken pptoken, IToken token) {
|
public PPToken getKind(IToken token) {
|
||||||
if(token == null)
|
if(token == null)
|
||||||
return false;
|
return null;
|
||||||
|
|
||||||
switch(token.getKind()) {
|
switch(token.getKind()) {
|
||||||
case UPCParsersym.TK_Hash : return pptoken == PPToken.HASH;
|
case UPCParsersym.TK_Hash : return HASH;
|
||||||
case UPCParsersym.TK_HashHash : return pptoken == PPToken.HASHHASH;
|
case UPCParsersym.TK_HashHash : return HASHHASH;
|
||||||
case UPCParsersym.TK_LeftParen : return pptoken == PPToken.LPAREN;
|
case UPCParsersym.TK_LeftParen : return LPAREN;
|
||||||
case UPCParsersym.TK_NewLine : return pptoken == PPToken.NEWLINE;
|
case UPCParsersym.TK_NewLine : return NEWLINE;
|
||||||
case UPCParsersym.TK_Comma : return pptoken == PPToken.COMMA;
|
case UPCParsersym.TK_Comma : return COMMA;
|
||||||
case UPCParsersym.TK_RightParen : return pptoken == PPToken.RPAREN;
|
case UPCParsersym.TK_RightParen : return RPAREN;
|
||||||
case UPCParsersym.TK_DotDotDot : return pptoken == PPToken.DOTDOTDOT;
|
case UPCParsersym.TK_DotDotDot : return DOTDOTDOT;
|
||||||
case UPCParsersym.TK_EOF_TOKEN : return pptoken == PPToken.EOF;
|
case UPCParsersym.TK_EOF_TOKEN : return EOF;
|
||||||
case UPCParsersym.TK_stringlit : return pptoken == PPToken.STRINGLIT;
|
case UPCParsersym.TK_stringlit : return STRINGLIT;
|
||||||
case UPCParsersym.TK_integer : return pptoken == PPToken.INTEGER;
|
case UPCParsersym.TK_integer : return INTEGER;
|
||||||
case UPCParsersym.TK_LT : return pptoken == PPToken.LEFT_ANGLE_BRACKET;
|
case UPCParsersym.TK_LT : return LEFT_ANGLE_BRACKET;
|
||||||
case UPCParsersym.TK_GT : return pptoken == PPToken.RIGHT_ANGLE_BRACKET;
|
case UPCParsersym.TK_GT : return RIGHT_ANGLE_BRACKET;
|
||||||
case UPCParsersym.TK_SingleLineComment : return pptoken == PPToken.SINGLE_LINE_COMMENT;
|
case UPCParsersym.TK_SingleLineComment : return SINGLE_LINE_COMMENT;
|
||||||
case UPCParsersym.TK_MultiLineComment : return pptoken == PPToken.MULTI_LINE_COMMENT;
|
case UPCParsersym.TK_MultiLineComment : return MULTI_LINE_COMMENT;
|
||||||
// an identifier might be a preprocessing directive like #if or #include
|
case UPCParsersym.TK_identifier : return IDENT;
|
||||||
case UPCParsersym.TK_identifier :
|
|
||||||
PPToken result = PPToken.getDirective(token.toString());
|
|
||||||
return pptoken == ((result == null) ? PPToken.IDENT : result);
|
|
||||||
}
|
}
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getKind(int tokenToMake) {
|
public IToken createToken(int tokenToMake, int startOffset, int endOffset, String image) {
|
||||||
|
int kind;
|
||||||
switch(tokenToMake) {
|
switch(tokenToMake) {
|
||||||
case KIND_IDENTIFIER : return UPCParsersym.TK_identifier;
|
case KIND_IDENTIFIER : kind = UPCParsersym.TK_identifier; break;
|
||||||
case KIND_EOF : return UPCParsersym.TK_EOF_TOKEN;
|
case KIND_EOF : kind = UPCParsersym.TK_EOF_TOKEN; break;
|
||||||
case KIND_COMPLETION : return UPCParsersym.TK_Completion;
|
case KIND_COMPLETION : kind = UPCParsersym.TK_Completion; break;
|
||||||
case KIND_END_OF_COMPLETION : return UPCParsersym.TK_EndOfCompletion;
|
case KIND_END_OF_COMPLETION : kind = UPCParsersym.TK_EndOfCompletion; break;
|
||||||
case KIND_INTEGER : return UPCParsersym.TK_integer;
|
case KIND_INTEGER : kind = UPCParsersym.TK_integer; break;
|
||||||
case KIND_STRINGLIT : return UPCParsersym.TK_stringlit;
|
case KIND_STRINGLIT : kind = UPCParsersym.TK_stringlit; break;
|
||||||
case KIND_INVALID : return UPCParsersym.TK_Invalid;
|
case KIND_INVALID : kind = UPCParsersym.TK_Invalid; break;
|
||||||
default : return UPCParsersym.TK_Invalid;
|
default : kind = UPCParsersym.TK_Invalid; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new SynthesizedToken(startOffset, endOffset, kind, image);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IToken cloneToken(IToken token) {
|
||||||
|
if(token instanceof Token) {
|
||||||
|
return ((Token)token).clone();
|
||||||
|
}
|
||||||
|
throw new RuntimeException("don't know what kind of token that is"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getLPGOrderedTerminalSymbols() {
|
public String[] getLPGOrderedTerminalSymbols() {
|
||||||
return UPCParsersym.orderedTerminalSymbols;
|
return UPCParsersym.orderedTerminalSymbols;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue