mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 06:02:11 +02:00
cleaning up the architecture of the LR parsers
This commit is contained in:
parent
b1f0b681d3
commit
c9b3182198
85 changed files with 21758 additions and 21477 deletions
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
-- All we need to do is import the main parser and redefine the start symbol.
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
$Import
|
||||
C99Grammar.g
|
||||
|
|
|
@ -11,19 +11,15 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRParserTemplate.g
|
||||
|
||||
-- This file is needed because LPG won't allow redefinition of the
|
||||
-- start symbol, so C99Grammar.g cannot define a start symbol.
|
||||
-- start symbol, so C99Grammar.g cannot define the start symbol.
|
||||
|
||||
$Import
|
||||
C99Grammar.g
|
||||
$End
|
||||
|
||||
$Define
|
||||
$ast_class /. IASTTranslationUnit ./
|
||||
$End
|
||||
|
||||
$Start
|
||||
translation_unit
|
||||
$End
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
-- All we need to do is import the main parser and redefine the start symbol.
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
$Import
|
||||
CPPGrammar.g
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
$Import
|
||||
CPPGrammar.g
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRParserTemplate.g
|
||||
|
||||
|
||||
-- This file is needed because LPG won't allow redefinition of the
|
||||
|
@ -21,10 +21,6 @@ $Import
|
|||
CPPGrammar.g
|
||||
$End
|
||||
|
||||
$Define
|
||||
$ast_class /. IASTTranslationUnit ./
|
||||
$End
|
||||
|
||||
$Start
|
||||
translation_unit
|
||||
$End
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
-- This parser is a bit of a hack.
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.gcc
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRParserTemplate.g
|
||||
|
||||
|
||||
-- This file is needed because LPG won't allow redefinition of the
|
||||
|
@ -21,10 +21,6 @@ $Import
|
|||
GCCGrammar.g
|
||||
$End
|
||||
|
||||
$Define
|
||||
$ast_class /. IASTTranslationUnit ./
|
||||
$End
|
||||
|
||||
$Start
|
||||
translation_unit
|
||||
$End
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.gcc
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.gpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRParserTemplate.g
|
||||
|
||||
|
||||
-- This file is needed because LPG won't allow redefinition of the
|
||||
|
@ -21,10 +21,6 @@ $Import
|
|||
GPPGrammar.g
|
||||
$End
|
||||
|
||||
$Define
|
||||
$ast_class /. IASTTranslationUnit ./
|
||||
$End
|
||||
|
||||
$Start
|
||||
translation_unit
|
||||
$End
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.lrparser.gpp
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
----------------------------------------------------------------------------------
|
||||
|
||||
|
||||
-- This template is a modified version of BtParserTemplateD.g.
|
||||
-- This template is a modified version of BtParserTemplateD.g. for use with the LR parsers.
|
||||
-- This template contains a fix for an LPG bug:
|
||||
-- http://sourceforge.net/tracker/index.php?func=detail&aid=1732851&group_id=155963&atid=797879
|
||||
|
||||
|
@ -141,7 +141,9 @@ $End
|
|||
|
||||
$Headers
|
||||
/.
|
||||
public class $action_type extends PrsStream implements RuleAction$additional_interfaces
|
||||
public class $action_type extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser<$ast_class>
|
||||
$additional_interfaces
|
||||
{
|
||||
private static ParseTable prs = new $prs_type();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -312,10 +314,10 @@ $End
|
|||
$Define
|
||||
-- These macros allow the template and header code to be customized by an extending parser.
|
||||
|
||||
$ast_class /. IASTNode ./ -- override with more specific node type
|
||||
$ast_class /. IASTTranslationUnit ./ -- override in secondary parsers
|
||||
|
||||
$extra_interfaces /. ./ -- can override this macro to provide additional interfaces
|
||||
$additional_interfaces /. , IParserActionTokenProvider, IParser<$ast_class> $extra_interfaces ./
|
||||
$additional_interfaces /. $extra_interfaces ./
|
||||
|
||||
$build_action_class /. ./ -- name of the class that has the AST building callbacks
|
||||
$node_factory_create_expression /. ./ -- expression that will create the INodeFactory
|
||||
|
@ -332,10 +334,16 @@ $Globals
|
|||
/.
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
./
|
||||
$End
|
||||
|
||||
|
@ -344,7 +352,11 @@ $Headers
|
|||
private $build_action_class action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public $action_type() { // constructor
|
||||
|
||||
public $action_type(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -363,10 +375,9 @@ $Headers
|
|||
}
|
||||
|
||||
|
||||
public $ast_class parse(Set<IParser.Options> options) {
|
||||
public $ast_class parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -398,37 +409,4 @@ $Headers
|
|||
./
|
||||
$End
|
||||
|
||||
$Globals
|
||||
/.
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
./
|
||||
$End
|
||||
|
||||
$Headers
|
||||
/.
|
||||
|
||||
private ITokenMap tokenMap = null;
|
||||
|
||||
public void setTokens(List<IToken> tokens) {
|
||||
resetTokenStream();
|
||||
addToken(new Token(null, 0, 0, 0)); // dummy token
|
||||
for(IToken token : tokens) {
|
||||
token.setKind(tokenMap.mapKind(token.getKind()));
|
||||
addToken(token);
|
||||
}
|
||||
addToken(new Token(null, 0, 0, $sym_type.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public $action_type(IParserActionTokenProvider parser) { // constructor
|
||||
tokenMap = new TokenMap($sym_type.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
./
|
||||
$End
|
||||
|
||||
|
||||
--
|
||||
-- E N D O F T E M P L A T E
|
||||
--
|
|
@ -0,0 +1,66 @@
|
|||
----------------------------------------------------------------------------------
|
||||
-- Copyright (c) 2006, 2009 IBM Corporation and others.
|
||||
-- All rights reserved. This program and the accompanying materials
|
||||
-- are made available under the terms of the Eclipse Public License v1.0
|
||||
-- which accompanies this distribution, and is available at
|
||||
-- http://www.eclipse.org/legal/epl_v10.html
|
||||
--
|
||||
-- Contributors:
|
||||
-- IBM Corporation - initial API and implementation
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
|
||||
%Options programming_language=java,margin=4,backtrack
|
||||
%Options table,error_maps,scopes
|
||||
%options prefix=TK_,
|
||||
%options action=("*.java", "/.", "./")
|
||||
%options ParseTable=lpg.lpgjavaruntime.ParseTable
|
||||
|
||||
|
||||
-- additional code needed by secondary parsers
|
||||
|
||||
-- path is relative to the grammar file that uses the template
|
||||
$Include
|
||||
../template/LRParserTemplate.g
|
||||
$End
|
||||
|
||||
|
||||
|
||||
|
||||
$Define
|
||||
|
||||
$additional_interfaces /. , ISecondaryParser<$ast_class> $extra_interfaces ./
|
||||
|
||||
$End
|
||||
|
||||
$Globals
|
||||
/.
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
./
|
||||
$End
|
||||
|
||||
$Headers
|
||||
/.
|
||||
|
||||
private ITokenMap tokenMap = null;
|
||||
|
||||
public void setTokens(List<IToken> tokens) {
|
||||
resetTokenStream();
|
||||
addToken(new Token(null, 0, 0, 0)); // dummy token
|
||||
for(IToken token : tokens) {
|
||||
token.setKind(tokenMap.mapKind(token.getKind()));
|
||||
addToken(token);
|
||||
}
|
||||
addToken(new Token(null, 0, 0, $sym_type.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public $action_type(ITokenStream stream, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap($sym_type.orderedTerminalSymbols, stream.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
./
|
||||
$End
|
||||
|
|
@ -35,7 +35,7 @@ import org.eclipse.cdt.core.dom.ast.IParameter;
|
|||
import org.eclipse.cdt.core.dom.ast.IPointerType;
|
||||
import org.eclipse.cdt.core.dom.ast.IType;
|
||||
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.util.DebugUtil;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parsersym;
|
||||
|
@ -87,7 +87,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
|
|||
|
||||
|
||||
// provides limited access to the token stream
|
||||
private final IParserActionTokenProvider parser;
|
||||
private final ITokenStream parser;
|
||||
|
||||
// The symbolTable currently in use
|
||||
private C99SymbolTable symbolTable = C99SymbolTable.EMPTY_TABLE;
|
||||
|
@ -138,7 +138,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
|
|||
}
|
||||
|
||||
|
||||
public C99ResolveParserAction(IParserActionTokenProvider parser) {
|
||||
public C99ResolveParserAction(ITokenStream parser) {
|
||||
this.parser = parser;
|
||||
bindingScopeStack.add(new C99Scope(EScopeKind.eGlobal)); // the global scope
|
||||
System.out.println();
|
||||
|
|
|
@ -14,7 +14,7 @@ import java.util.LinkedList;
|
|||
|
||||
import lpg.lpgjavaruntime.IToken;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.parser.util.DebugUtil;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.symboltable.TypedefSymbolTable;
|
||||
/**
|
||||
|
@ -32,7 +32,7 @@ public class C99TypedefTrackerParserAction {
|
|||
|
||||
|
||||
// provides limited access to the token stream
|
||||
private final IParserActionTokenProvider parser;
|
||||
private final ITokenStream parser;
|
||||
|
||||
// The symbolTable currently in use
|
||||
private TypedefSymbolTable symbolTable = TypedefSymbolTable.EMPTY_TABLE;
|
||||
|
@ -64,7 +64,7 @@ public class C99TypedefTrackerParserAction {
|
|||
}
|
||||
|
||||
|
||||
public C99TypedefTrackerParserAction(IParserActionTokenProvider parser) {
|
||||
public C99TypedefTrackerParserAction(ITokenStream parser) {
|
||||
this.parser = parser;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,22 +15,19 @@ import java.util.HashSet;
|
|||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
||||
import org.eclipse.cdt.core.dom.parser.CLanguageKeywords;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ILanguage;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.CodeReader;
|
||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
|
@ -38,9 +35,7 @@ import org.eclipse.cdt.core.parser.IScannerInfo;
|
|||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.util.ASTPrinter;
|
||||
import org.eclipse.cdt.core.parser.util.DebugUtil;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTInternal;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit;
|
||||
import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
|
||||
import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
|
||||
|
@ -68,15 +63,7 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
* Can be overridden in subclasses to provide a different parser
|
||||
* for a language extension.
|
||||
*/
|
||||
protected abstract IParser<IASTTranslationUnit> getParser();
|
||||
|
||||
|
||||
/**
|
||||
* A token map is used to map tokens from the DOM preprocessor
|
||||
* to the tokens defined by an LPG parser.
|
||||
*/
|
||||
protected abstract IDOMTokenMap getTokenMap();
|
||||
|
||||
protected abstract IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Set<IParser.Options> options);
|
||||
|
||||
/**
|
||||
* Returns the ParserLanguage value that is to be used when creating
|
||||
|
@ -92,11 +79,6 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
protected abstract IScannerExtensionConfiguration getScannerExtensionConfiguration();
|
||||
|
||||
|
||||
/**
|
||||
* Returns a bindings provider that will provide additional bindings based on the language extension.
|
||||
*/
|
||||
protected abstract IBuiltinBindingsProvider getBuiltinBindingsProvider();
|
||||
|
||||
|
||||
@SuppressWarnings("nls")
|
||||
@Override
|
||||
|
@ -124,24 +106,21 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
IScanner preprocessor = new CPreprocessor(reader, scanInfo, pl, log, config, fileCreator);
|
||||
preprocessor.setComputeImageLocations((options & ILanguage.OPTION_NO_IMAGE_LOCATIONS) == 0);
|
||||
|
||||
// The translation unit has to be created here so that the preprocessor
|
||||
// can fill in the preprocessor AST nodes.
|
||||
//IASTTranslationUnit tu = getASTTranslationUnit(index, preprocessor);
|
||||
IParser<IASTTranslationUnit> parser = getParser();
|
||||
CPreprocessorAdapter.runCPreprocessor(preprocessor, parser, getTokenMap());
|
||||
|
||||
//parser.setScanner(preprocessor, getTokenMap());
|
||||
//CPreprocessorAdapter.runCPreprocessor(preprocessor, parser, getTokenMap());
|
||||
|
||||
Set<IParser.Options> parserOptions = new HashSet<IParser.Options>();
|
||||
//if((options & OPTION_SKIP_FUNCTION_BODIES) != 0)
|
||||
// parserOptions.add(IParser.Options.OPTION_SKIP_FUNCTION_BODIES);
|
||||
if((options & OPTION_SKIP_TRIVIAL_EXPRESSIONS_IN_AGGREGATE_INITIALIZERS) != 0)
|
||||
parserOptions.add(IParser.Options.OPTION_SKIP_TRIVIAL_EXPRESSIONS_IN_AGGREGATE_INITIALIZERS);
|
||||
|
||||
if(!parserOptions.isEmpty())
|
||||
parserOptions = EnumSet.copyOf(parserOptions);
|
||||
|
||||
IASTTranslationUnit tu = parser.parse(parserOptions);
|
||||
IParser<IASTTranslationUnit> parser = getParser(preprocessor, index, parserOptions);
|
||||
IASTTranslationUnit tu = parser.parse();
|
||||
tu.setIsHeaderUnit((options & OPTION_IS_SOURCE_UNIT) == 0); // the TU is marked as either a source file or a header file
|
||||
setUpTranslationUnit(tu, preprocessor, index);
|
||||
|
||||
if(DEBUG_PRINT_AST) {
|
||||
System.out.println("Base Extensible Language AST:");
|
||||
|
@ -152,43 +131,6 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private void setUpTranslationUnit(IASTTranslationUnit tu, IScanner preprocessor, IIndex index) throws CoreException {
|
||||
tu.setIndex(index);
|
||||
|
||||
// add built-in names to the scope
|
||||
IBuiltinBindingsProvider builtinBindingsProvider = getBuiltinBindingsProvider();
|
||||
if (builtinBindingsProvider != null) {
|
||||
IScope tuScope = tu.getScope();
|
||||
IBinding[] bindings = builtinBindingsProvider.getBuiltinBindings(tuScope);
|
||||
try {
|
||||
for (IBinding binding : bindings) {
|
||||
ASTInternal.addBinding(tuScope, binding);
|
||||
}
|
||||
} catch (DOMException e) {
|
||||
throw new CoreException(LRParserPlugin.createStatus(e));
|
||||
}
|
||||
}
|
||||
|
||||
if(tu instanceof ASTTranslationUnit) {
|
||||
((ASTTranslationUnit)tu).setLocationResolver(preprocessor.getLocationResolver());
|
||||
}
|
||||
for(IASTNode node : tu.getAllPreprocessorStatements()) {
|
||||
node.setParent(tu);
|
||||
}
|
||||
for(IASTNode node : tu.getComments()) {
|
||||
node.setParent(tu);
|
||||
}
|
||||
for(IASTNode node : tu.getMacroDefinitions()) {
|
||||
node.setParent(tu);
|
||||
}
|
||||
for(IASTNode node : tu.getMacroExpansions()) {
|
||||
node.setParent(tu);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public IASTTranslationUnit getASTTranslationUnit(CodeReader reader,
|
||||
IScannerInfo scanInfo, ICodeReaderFactory fileCreator,
|
||||
IIndex index, IParserLogService log) throws CoreException {
|
||||
|
@ -220,14 +162,9 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
IScanner preprocessor = new CPreprocessor(reader, scanInfo, pl, log, config, fileCreator);
|
||||
preprocessor.setContentAssistMode(offset);
|
||||
|
||||
IParser<IASTTranslationUnit> parser = getParser();
|
||||
CPreprocessorAdapter.runCPreprocessor(preprocessor, parser, getTokenMap());
|
||||
|
||||
// the parser will fill in the rest of the AST
|
||||
Set<IParser.Options> parserOptions = EnumSet.of(IParser.Options.OPTION_SKIP_TRIVIAL_EXPRESSIONS_IN_AGGREGATE_INITIALIZERS);
|
||||
IASTTranslationUnit tu = parser.parse(parserOptions);
|
||||
setUpTranslationUnit(tu, preprocessor, index);
|
||||
|
||||
IParser<IASTTranslationUnit> parser = getParser(preprocessor, index, parserOptions);
|
||||
parser.parse();
|
||||
IASTCompletionNode completionNode = parser.getCompletionNode();
|
||||
|
||||
if(DEBUG_PRINT_AST) {
|
||||
|
@ -283,4 +220,8 @@ public abstract class BaseExtensibleLanguage extends AbstractLanguage {
|
|||
return super.getAdapter(adapter);
|
||||
}
|
||||
|
||||
public IContributedModelBuilder createModelBuilder(@SuppressWarnings("unused") ITranslationUnit tu) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,8 +21,10 @@ import org.eclipse.cdt.core.parser.OffsetLimitReachedException;
|
|||
* Adapts the CPreprocessor from the CDT core for use with LPG based parsers.
|
||||
*
|
||||
* @author Mike Kucera
|
||||
* @noreference
|
||||
* TODO move into an internal package
|
||||
*/
|
||||
class CPreprocessorAdapter {
|
||||
public class CPreprocessorAdapter {
|
||||
|
||||
/**
|
||||
* During content assist the preprocessor may return a completion token
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
package org.eclipse.cdt.core.dom.lrparser;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
|
@ -23,7 +22,7 @@ import org.eclipse.cdt.core.model.ILanguage;
|
|||
*
|
||||
* @author Mike Kucera
|
||||
*/
|
||||
public interface IParser<N extends IASTNode> extends ITokenCollector {
|
||||
public interface IParser<N extends IASTNode> {
|
||||
|
||||
/**
|
||||
* Options used by implementations of IParser. Some of the options
|
||||
|
@ -69,7 +68,7 @@ public interface IParser<N extends IASTNode> extends ITokenCollector {
|
|||
* @throws NullPointerException if either parameter is null
|
||||
* @see EnumSet
|
||||
*/
|
||||
public N parse(Set<Options> options);
|
||||
public N parse();
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2009 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lpg.lpgjavaruntime.IToken;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
|
||||
public interface ISecondaryParser<N extends IASTNode> extends IParser<N> {
|
||||
|
||||
|
||||
/**
|
||||
* Set the list of tokens that will be parsed.
|
||||
*
|
||||
* The given list does not need to contain dummy and EOF tokens,
|
||||
* these will be added automatically.
|
||||
*
|
||||
* This method causes any tokens already contained in the parser
|
||||
* to be removed.
|
||||
*
|
||||
* This method is mainly used by secondary parsers that are called
|
||||
* from a main parser.
|
||||
*
|
||||
* @throws NullPointerException if tokens is null
|
||||
*/
|
||||
public void setTokens(List<IToken> tokens);
|
||||
}
|
|
@ -10,8 +10,6 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lpg.lpgjavaruntime.IToken;
|
||||
|
||||
/**
|
||||
|
@ -34,19 +32,4 @@ public interface ITokenCollector {
|
|||
*/
|
||||
public void addToken(IToken token);
|
||||
|
||||
/**
|
||||
* Set the list of tokens that will be parsed.
|
||||
*
|
||||
* The given list does not need to contain dummy and EOF tokens,
|
||||
* these will be added automatically.
|
||||
*
|
||||
* This method causes any tokens already contained in the parser
|
||||
* to be removed.
|
||||
*
|
||||
* This method is mainly used by secondary parsers that are called
|
||||
* from a main parser.
|
||||
*
|
||||
* @throws NullPointerException if tokens is null
|
||||
*/
|
||||
public void setTokens(List<IToken> tokens);
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ public class LRParserPlugin extends Plugin {
|
|||
public static final String PLUGIN_ID = "org.eclipse.cdt.core.lrparser"; //$NON-NLS-1$
|
||||
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static LRParserPlugin plugin;
|
||||
|
||||
|
||||
|
@ -43,17 +42,52 @@ public class LRParserPlugin extends Plugin {
|
|||
}
|
||||
|
||||
/**
|
||||
* @noreference This method is not intended to be referenced by clients.
|
||||
* @noreference
|
||||
*/
|
||||
public static IStatus createStatus(String msg, Throwable e) {
|
||||
return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, msg, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference This method is not intended to be referenced by clients.
|
||||
* @noreference
|
||||
*/
|
||||
public static IStatus createStatus(Throwable e) {
|
||||
return createStatus(e.getMessage(), e);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference
|
||||
*/
|
||||
public static void log(IStatus status) {
|
||||
plugin.getLog().log(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference
|
||||
*/
|
||||
public static void logError(Throwable exception, String message) {
|
||||
log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, message, exception));
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference
|
||||
*/
|
||||
public static void logError(Throwable exception) {
|
||||
logError(exception, exception.getMessage());
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference
|
||||
*/
|
||||
public static void logError(String message) {
|
||||
log(new Status(IStatus.ERROR, PLUGIN_ID, message));
|
||||
}
|
||||
|
||||
/**
|
||||
* @noreference
|
||||
*/
|
||||
public static void logInfo(String message) {
|
||||
log(new Status(IStatus.INFO, PLUGIN_ID, message));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
|
||||
@SuppressWarnings("restriction")
|
||||
|
@ -41,7 +41,7 @@ public abstract class AbstractParserAction {
|
|||
|
||||
|
||||
/** Provides an interface to the token stream */
|
||||
protected final IParserActionTokenProvider parser;
|
||||
protected final ITokenStream stream;
|
||||
|
||||
/** Stack that holds the intermediate nodes as the AST is being built */
|
||||
protected final ScopedStack<Object> astStack;
|
||||
|
@ -70,21 +70,21 @@ public abstract class AbstractParserAction {
|
|||
* @param tu Root node of the AST, its list of declarations should be empty.
|
||||
* @throws NullPointerException if any of the parameters are null
|
||||
*/
|
||||
public AbstractParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack) {
|
||||
public AbstractParserAction(ITokenStream parser, ScopedStack<Object> astStack) {
|
||||
if(parser == null)
|
||||
throw new NullPointerException("parser is null"); //$NON-NLS-1$
|
||||
if(astStack == null)
|
||||
throw new NullPointerException("astStack is null"); //$NON-NLS-1$
|
||||
|
||||
this.parser = parser;
|
||||
this.stream = parser;
|
||||
this.astStack = astStack;
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected void setOffsetAndLength(IASTNode node) {
|
||||
int ruleOffset = parser.getLeftIToken().getStartOffset();
|
||||
int ruleLength = parser.getRightIToken().getEndOffset() - ruleOffset;
|
||||
int ruleOffset = stream.getLeftIToken().getStartOffset();
|
||||
int ruleLength = stream.getRightIToken().getEndOffset() - ruleOffset;
|
||||
((ASTNode)node).setOffsetAndLength(ruleOffset, ruleLength < 0 ? 0 : ruleLength);
|
||||
}
|
||||
|
||||
|
@ -143,15 +143,15 @@ public abstract class AbstractParserAction {
|
|||
* Runs the given parser on the given token list.
|
||||
*
|
||||
*/
|
||||
protected <N extends IASTNode> N runSecondaryParser(IParser<N> secondaryParser) {
|
||||
return runSecondaryParser(secondaryParser, parser.getRuleTokens());
|
||||
protected <N extends IASTNode> N runSecondaryParser(ISecondaryParser<N> secondaryParser) {
|
||||
return runSecondaryParser(secondaryParser, stream.getRuleTokens());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Runs the given parser on the tokens that make up the current rule.
|
||||
*/
|
||||
protected <N extends IASTNode> N runSecondaryParser(IParser<N> secondaryParser, List<IToken> tokens) {
|
||||
protected <N extends IASTNode> N runSecondaryParser(ISecondaryParser<N> secondaryParser, List<IToken> tokens) {
|
||||
// the secondary parser will alter the token kinds, which will need to be undone
|
||||
int[] savedKinds = new int[tokens.size()];
|
||||
|
||||
|
@ -160,7 +160,7 @@ public abstract class AbstractParserAction {
|
|||
savedKinds[i++] = token.getKind();
|
||||
|
||||
secondaryParser.setTokens(tokens);
|
||||
N result = secondaryParser.parse(options);
|
||||
N result = secondaryParser.parse();
|
||||
|
||||
IASTCompletionNode compNode = secondaryParser.getCompletionNode();
|
||||
if(compNode != null) {
|
||||
|
@ -227,6 +227,6 @@ public abstract class AbstractParserAction {
|
|||
* Gets the current token and places it on the stack for later consumption.
|
||||
*/
|
||||
public void consumeToken() {
|
||||
astStack.push(parser.getRightIToken());
|
||||
astStack.push(stream.getRightIToken());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.util.List;
|
|||
|
||||
import lpg.lpgjavaruntime.IToken;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTArrayDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTArrayModifier;
|
||||
|
@ -62,13 +63,20 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTTypeId;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.INodeFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCastExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLiteralExpression;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.LRParserPlugin;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTInternal;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTQueries;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit;
|
||||
|
@ -98,6 +106,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
protected abstract boolean isIdentifierToken(IToken token);
|
||||
|
||||
|
||||
protected IASTTranslationUnit tu = null;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -105,7 +114,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* @param tu Root node of the AST, its list of declarations should be empty.
|
||||
* @throws NullPointerException if any of the parameters are null
|
||||
*/
|
||||
public BuildASTParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, INodeFactory nodeFactory, ISecondaryParserFactory parserFactory) {
|
||||
public BuildASTParserAction(ITokenStream parser, ScopedStack<Object> astStack, INodeFactory nodeFactory, ISecondaryParserFactory parserFactory) {
|
||||
super(parser, astStack);
|
||||
|
||||
if(nodeFactory == null)
|
||||
|
@ -118,14 +127,40 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
}
|
||||
|
||||
|
||||
public void consumeTranslationUnit() {
|
||||
// can't close the outermost scope
|
||||
// the outermost scope may be empty if there are no tokens in the file
|
||||
IASTTranslationUnit tu = nodeFactory.newTranslationUnit();
|
||||
public void initializeTranslationUnit(IScanner scanner, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index) {
|
||||
tu = nodeFactory.newTranslationUnit();
|
||||
tu.setIndex(index);
|
||||
|
||||
// add built-in names to the scope
|
||||
if (builtinBindingsProvider != null) {
|
||||
IScope tuScope = tu.getScope();
|
||||
IBinding[] bindings = builtinBindingsProvider.getBuiltinBindings(tuScope);
|
||||
try {
|
||||
for (IBinding binding : bindings) {
|
||||
ASTInternal.addBinding(tuScope, binding);
|
||||
}
|
||||
} catch (DOMException e) {
|
||||
LRParserPlugin.logError(e);
|
||||
}
|
||||
}
|
||||
|
||||
if(tu instanceof ASTTranslationUnit) {
|
||||
((ASTTranslationUnit)tu).setLocationResolver(scanner.getLocationResolver());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void consumeTranslationUnit() {
|
||||
if(tu == null)
|
||||
tu = nodeFactory.newTranslationUnit();
|
||||
|
||||
// can't close the outermost scope
|
||||
for(Object o : astStack.topScope()) {
|
||||
tu.addDeclaration((IASTDeclaration)o);
|
||||
}
|
||||
while(!astStack.isEmpty()) {
|
||||
astStack.pop();
|
||||
}
|
||||
|
||||
// this is the same way that the DOM parser computes the length
|
||||
IASTDeclaration[] declarations = tu.getDeclarations();
|
||||
|
@ -146,7 +181,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
*
|
||||
* @see AbstractGNUSourceCodeParser#resolveAmbiguities()
|
||||
*/
|
||||
private void resolveAmbiguityNodes(IASTTranslationUnit tu) {
|
||||
private static void resolveAmbiguityNodes(IASTTranslationUnit tu) {
|
||||
if (tu instanceof ASTTranslationUnit) {
|
||||
((ASTTranslationUnit)tu).resolveAmbiguities();
|
||||
}
|
||||
|
@ -156,7 +191,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* Consumes a single identifier token.
|
||||
*/
|
||||
public void consumeIdentifierName() {
|
||||
astStack.push(createName(parser.getRightIToken()));
|
||||
astStack.push(createName(stream.getRightIToken()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -173,10 +208,10 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
// attempt to also parse the tokens as an expression
|
||||
IASTExpressionStatement expressionStatement = null;
|
||||
if(decl instanceof IASTSimpleDeclaration) {
|
||||
List<IToken> expressionTokens = parser.getRuleTokens();
|
||||
List<IToken> expressionTokens = stream.getRuleTokens();
|
||||
expressionTokens = expressionTokens.subList(0, expressionTokens.size()-1); // remove the semicolon at the end
|
||||
|
||||
IParser<IASTExpression> expressionParser = parserFactory.getExpressionParser(parser);
|
||||
ISecondaryParser<IASTExpression> expressionParser = parserFactory.getExpressionParser(stream, options);
|
||||
IASTExpression expr = runSecondaryParser(expressionParser, expressionTokens);
|
||||
|
||||
if(expr != null) { // the parse may fail
|
||||
|
@ -186,7 +221,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
}
|
||||
|
||||
|
||||
List<IToken> tokens = parser.getRuleTokens();
|
||||
List<IToken> tokens = stream.getRuleTokens();
|
||||
|
||||
IASTNode result;
|
||||
if(expressionStatement == null)
|
||||
|
@ -253,7 +288,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* @see ICPPASTLiteralExpression
|
||||
*/
|
||||
public void consumeExpressionLiteral(int kind) {
|
||||
IToken token = parser.getRightIToken();
|
||||
IToken token = stream.getRightIToken();
|
||||
String rep = token.toString();
|
||||
|
||||
// Strip the quotes from string literals, this is just to be consistent
|
||||
|
@ -280,7 +315,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
|
||||
|
||||
public void consumeExpressionID() {
|
||||
IASTName name = createName(parser.getLeftIToken());
|
||||
IASTName name = createName(stream.getLeftIToken());
|
||||
IASTIdExpression expr = nodeFactory.newIdExpression(name);
|
||||
setOffsetAndLength(expr);
|
||||
astStack.push(expr);
|
||||
|
@ -353,7 +388,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
IASTExpression alternateExpr = null;
|
||||
if(operator == IASTCastExpression.op_cast) { // don't reparse for dynamic_cast etc as those are not ambiguous
|
||||
// try parsing as non-cast to resolve ambiguities
|
||||
IParser<IASTExpression> secondaryParser = parserFactory.getNoCastExpressionParser(parser);
|
||||
ISecondaryParser<IASTExpression> secondaryParser = parserFactory.getNoCastExpressionParser(stream, options);
|
||||
alternateExpr = runSecondaryParser(secondaryParser);
|
||||
}
|
||||
|
||||
|
@ -393,7 +428,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
setOffsetAndLength(expr);
|
||||
|
||||
// try parsing as an expression to resolve ambiguities
|
||||
IParser<IASTExpression> secondaryParser = parserFactory.getSizeofExpressionParser(parser);
|
||||
ISecondaryParser<IASTExpression> secondaryParser = parserFactory.getSizeofExpressionParser(stream, options);
|
||||
IASTExpression alternateExpr = runSecondaryParser(secondaryParser);
|
||||
|
||||
if(alternateExpr == null)
|
||||
|
@ -439,7 +474,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
*/
|
||||
public void consumeStatementLabeled() {
|
||||
IASTStatement body = (IASTStatement) astStack.pop();
|
||||
IASTName label = createName(parser.getLeftIToken());
|
||||
IASTName label = createName(stream.getLeftIToken());
|
||||
|
||||
IASTLabelStatement stat = nodeFactory.newLabelStatement(label, body);
|
||||
setOffsetAndLength(stat);
|
||||
|
@ -474,7 +509,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
IASTStatement body = (IASTStatement) astStack.pop();
|
||||
|
||||
IASTDefaultStatement stat = nodeFactory.newDefaultStatement();
|
||||
List<IToken> tokens = parser.getRuleTokens();
|
||||
List<IToken> tokens = stream.getRuleTokens();
|
||||
IToken defaultToken = tokens.get(0);
|
||||
IToken colonToken = tokens.get(1);
|
||||
ParserUtil.setOffsetAndLength(stat, offset(defaultToken), offset(colonToken) - offset(defaultToken) + 1);
|
||||
|
@ -548,7 +583,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* jump_statement ::= goto goto_identifier ';'
|
||||
*/
|
||||
public void consumeStatementGoto() {
|
||||
IASTName name = createName(parser.getRuleTokens().get(1));
|
||||
IASTName name = createName(stream.getRuleTokens().get(1));
|
||||
IASTGotoStatement gotoStat = nodeFactory.newGotoStatement(name);
|
||||
setOffsetAndLength(gotoStat);
|
||||
astStack.push(gotoStat);
|
||||
|
@ -599,7 +634,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
declarator = (IASTDeclarator) astStack.pop();
|
||||
else {
|
||||
declarator = nodeFactory.newDeclarator(nodeFactory.newName());
|
||||
ParserUtil.setOffsetAndLength(declarator, parser.getRightIToken().getEndOffset(), 0);
|
||||
ParserUtil.setOffsetAndLength(declarator, stream.getRightIToken().getEndOffset(), 0);
|
||||
}
|
||||
|
||||
IASTDeclSpecifier declSpecifier = (IASTDeclSpecifier) astStack.pop();
|
||||
|
@ -664,7 +699,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* ::= 'asm' '(' 'stringlit' ')' ';'
|
||||
*/
|
||||
public void consumeDeclarationASM() {
|
||||
String s = parser.getRuleTokens().get(2).toString();
|
||||
String s = stream.getRuleTokens().get(2).toString();
|
||||
IASTASMDeclaration asm = nodeFactory.newASMDeclaration(s);
|
||||
|
||||
setOffsetAndLength(asm);
|
||||
|
@ -691,7 +726,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
*/
|
||||
public void consumeParameterDeclarationWithoutDeclarator() {
|
||||
// offsets need to be calculated differently in this case
|
||||
final int endOffset = parser.getRightIToken().getEndOffset();
|
||||
final int endOffset = stream.getRightIToken().getEndOffset();
|
||||
|
||||
IASTName name = nodeFactory.newName();
|
||||
ParserUtil.setOffsetAndLength(name, endOffset, 0);
|
||||
|
@ -911,7 +946,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* | 'enum' enum_identifier '{' <openscope> enumerator_list_opt '}'
|
||||
*/
|
||||
public void consumeTypeSpecifierEnumeration(boolean hasIdent) {
|
||||
IASTName name = (hasIdent) ? createName(parser.getRuleTokens().get(1)) : nodeFactory.newName();
|
||||
IASTName name = (hasIdent) ? createName(stream.getRuleTokens().get(1)) : nodeFactory.newName();
|
||||
|
||||
IASTEnumerationSpecifier enumSpec = nodeFactory.newEnumerationSpecifier(name);
|
||||
|
||||
|
@ -928,7 +963,7 @@ public abstract class BuildASTParserAction extends AbstractParserAction {
|
|||
* | enum_identifier '=' constant_expression
|
||||
*/
|
||||
public void consumeEnumerator(boolean hasInitializer) {
|
||||
IASTName name = createName(parser.getLeftIToken());
|
||||
IASTName name = createName(stream.getLeftIToken());
|
||||
|
||||
IASTExpression value = null;
|
||||
if(hasInitializer)
|
||||
|
|
|
@ -10,9 +10,11 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.action;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -28,20 +30,20 @@ public interface ISecondaryParserFactory {
|
|||
/**
|
||||
* Get the parser that will recognize expressions.
|
||||
*/
|
||||
IParser<IASTExpression> getExpressionParser(IParserActionTokenProvider parser);
|
||||
ISecondaryParser<IASTExpression> getExpressionParser(ITokenStream stream, Set<IParser.Options> options);
|
||||
|
||||
|
||||
/**
|
||||
* Expression parser that does not recognize cast expressions,
|
||||
* used to disambiguate casts.
|
||||
*/
|
||||
IParser<IASTExpression> getNoCastExpressionParser(IParserActionTokenProvider parser);
|
||||
ISecondaryParser<IASTExpression> getNoCastExpressionParser(ITokenStream stream, Set<IParser.Options> options);
|
||||
|
||||
|
||||
/**
|
||||
* Expression parser that treats all sizeof and typeid expressions
|
||||
* as unary expressions.
|
||||
*/
|
||||
IParser<IASTExpression> getSizeofExpressionParser(IParserActionTokenProvider parser);
|
||||
ISecondaryParser<IASTExpression> getSizeofExpressionParser(ITokenStream stream, Set<IParser.Options> options);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006, 2008 IBM Corporation and others.
|
||||
* Copyright (c) 2006, 2009 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -8,7 +8,7 @@
|
|||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser;
|
||||
package org.eclipse.cdt.core.dom.lrparser.action;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -28,7 +28,7 @@ import lpg.lpgjavaruntime.IToken;
|
|||
*
|
||||
* @author Mike Kucera
|
||||
*/
|
||||
public interface IParserActionTokenProvider {
|
||||
public interface ITokenStream {
|
||||
|
||||
/**
|
||||
* Returns the tokens that were parsed to recognized
|
|
@ -61,8 +61,8 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTTypeIdInitializerExpression;
|
|||
import org.eclipse.cdt.core.dom.ast.c.ICASTTypedefNameSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.c.ICNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.ICASTKnRFunctionDeclarator;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.BuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ParserUtil;
|
||||
|
@ -94,7 +94,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
* @param orderedTerminalSymbols When an instance of this class is created for a parser
|
||||
* that parsers token kinds will be mapped back to the base C99 parser's token kinds.
|
||||
*/
|
||||
public C99BuildASTParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, ICNodeFactory nodeFactory, ISecondaryParserFactory parserFactory) {
|
||||
public C99BuildASTParserAction(ITokenStream parser, ScopedStack<Object> astStack, ICNodeFactory nodeFactory, ISecondaryParserFactory parserFactory) {
|
||||
super(parser, astStack, nodeFactory, parserFactory);
|
||||
|
||||
this.nodeFactory = nodeFactory;
|
||||
|
@ -135,7 +135,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
* postfix_expression ::= postfix_expression '->' ident
|
||||
*/
|
||||
public void consumeExpressionFieldReference(boolean isPointerDereference) {
|
||||
IASTName name = createName(parser.getRightIToken());
|
||||
IASTName name = createName(stream.getRightIToken());
|
||||
IASTExpression owner = (IASTExpression) astStack.pop();
|
||||
IASTFieldReference expr = nodeFactory.newFieldReference(name, owner);
|
||||
expr.setIsPointerDereference(isPointerDereference);
|
||||
|
@ -289,7 +289,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
IASTName[] names = astStack.topScope().toArray(new IASTName[0]);
|
||||
declarator.setParameterNames(names);
|
||||
astStack.closeScope();
|
||||
int endOffset = endOffset(parser.getRightIToken());
|
||||
int endOffset = endOffset(stream.getRightIToken());
|
||||
addFunctionModifier(declarator, endOffset);
|
||||
}
|
||||
|
||||
|
@ -300,7 +300,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
* | identifier_list ',' 'identifier'
|
||||
*/
|
||||
public void consumeIdentifierKnR() {
|
||||
IASTName name = createName(parser.getRightIToken());
|
||||
IASTName name = createName(stream.getRightIToken());
|
||||
astStack.push(name);
|
||||
}
|
||||
|
||||
|
@ -313,7 +313,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
*/
|
||||
public void consumePointer() {
|
||||
IASTPointer pointer = nodeFactory.newPointer();
|
||||
IToken star = parser.getRightIToken();
|
||||
IToken star = stream.getRightIToken();
|
||||
ParserUtil.setOffsetAndLength(pointer, star);
|
||||
astStack.push(pointer);
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
}
|
||||
|
||||
if(hasDeclarator) {
|
||||
addFunctionModifier(declarator, endOffset(parser.getRightIToken()));
|
||||
addFunctionModifier(declarator, endOffset(stream.getRightIToken()));
|
||||
}
|
||||
else {
|
||||
setOffsetAndLength(declarator);
|
||||
|
@ -402,7 +402,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
* designator ::= '.' 'identifier'
|
||||
*/
|
||||
public void consumeDesignatorField() {
|
||||
IASTName name = createName(parser.getRightIToken());
|
||||
IASTName name = createName(stream.getRightIToken());
|
||||
ICASTFieldDesignator designator = nodeFactory.newFieldDesignator(name);
|
||||
setOffsetAndLength(designator);
|
||||
astStack.push(designator);
|
||||
|
@ -476,7 +476,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
List<Object> declarators = (hasDeclaratorList) ? astStack.closeScope() : Collections.emptyList();
|
||||
IASTDeclSpecifier declSpecifier = (IASTDeclSpecifier) astStack.pop();
|
||||
|
||||
List<IToken> ruleTokens = parser.getRuleTokens();
|
||||
List<IToken> ruleTokens = stream.getRuleTokens();
|
||||
if(ruleTokens.size() == 1 && baseKind(ruleTokens.get(0)) == TK_EndOfCompletion)
|
||||
return; // do not generate nodes for extra EOC tokens
|
||||
|
||||
|
@ -498,7 +498,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
*/
|
||||
public void consumeDeclarationEmpty() {
|
||||
// Don't generate declaration nodes for extra EOC tokens
|
||||
if(baseKind(parser.getLeftIToken()) == C99Parsersym.TK_EndOfCompletion)
|
||||
if(baseKind(stream.getLeftIToken()) == C99Parsersym.TK_EndOfCompletion)
|
||||
return;
|
||||
|
||||
IASTDeclSpecifier declSpecifier = nodeFactory.newSimpleDeclSpecifier();
|
||||
|
@ -535,12 +535,12 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
public void consumeTypeSpecifierComposite(boolean hasName) {
|
||||
|
||||
int key = 0;
|
||||
switch(baseKind(parser.getLeftIToken())) {
|
||||
switch(baseKind(stream.getLeftIToken())) {
|
||||
case TK_struct: key = IASTCompositeTypeSpecifier.k_struct;
|
||||
case TK_union: key = IASTCompositeTypeSpecifier.k_union;
|
||||
}
|
||||
|
||||
IASTName name = (hasName) ? createName(parser.getRuleTokens().get(1)) : nodeFactory.newName();
|
||||
IASTName name = (hasName) ? createName(stream.getRuleTokens().get(1)) : nodeFactory.newName();
|
||||
|
||||
ICASTCompositeTypeSpecifier typeSpec = nodeFactory.newCompositeTypeSpecifier(key, name);
|
||||
|
||||
|
@ -560,7 +560,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
* enum_specifier ::= 'enum' enum_identifier
|
||||
*/
|
||||
public void consumeTypeSpecifierElaborated(int kind) {
|
||||
IASTName name = createName(parser.getRuleTokens().get(1));
|
||||
IASTName name = createName(stream.getRuleTokens().get(1));
|
||||
IASTElaboratedTypeSpecifier typeSpec = nodeFactory.newElaboratedTypeSpecifier(kind, name);
|
||||
setOffsetAndLength(typeSpec);
|
||||
astStack.push(typeSpec);
|
||||
|
@ -604,7 +604,7 @@ public class C99BuildASTParserAction extends BuildASTParserAction {
|
|||
|
||||
// bug 234463, fix for content assist to work in this case
|
||||
int TK_EOC = TK_EndOfCompletion; // TODO: change this in the grammar file
|
||||
List<IToken> tokens = parser.getRuleTokens();
|
||||
List<IToken> tokens = stream.getRuleTokens();
|
||||
if(matchTokens(tokens, tokenMap,
|
||||
TK_for, TK_LeftParen, TK_Completion, TK_EOC, TK_EOC, TK_EOC, TK_EOC)) {
|
||||
IASTName name = createName(tokens.get(2));
|
||||
|
|
|
@ -10,10 +10,13 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.action.c99;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99ExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99NoCastExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99SizeofExpressionParser;
|
||||
|
@ -27,15 +30,15 @@ public class C99SecondaryParserFactory implements ISecondaryParserFactory {
|
|||
}
|
||||
|
||||
|
||||
public IParser<IASTExpression> getExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new C99ExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new C99ExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getNoCastExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new C99NoCastExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getNoCastExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new C99NoCastExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getSizeofExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new C99SizeofExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getSizeofExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new C99SizeofExpressionParser(stream, options);
|
||||
}
|
||||
}
|
|
@ -88,10 +88,10 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTUsingDirective;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTVisibilityLabel;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.LPGTokenAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.BuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ParserUtil;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
|
@ -104,7 +104,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousDeclarator;
|
|||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousExpression;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousStatement;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTAmbiguousTemplateArgument;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
|
||||
|
||||
/**
|
||||
|
@ -134,7 +133,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
* @param orderedTerminalSymbols When an instance of this class is created for a parser
|
||||
* that parsers token kinds will be mapped back to the base C99 parser's token kinds.
|
||||
*/
|
||||
public CPPBuildASTParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, ICPPNodeFactory nodeFactory, ICPPSecondaryParserFactory parserFactory) {
|
||||
public CPPBuildASTParserAction(ITokenStream parser, ScopedStack<Object> astStack, ICPPNodeFactory nodeFactory, ICPPSecondaryParserFactory parserFactory) {
|
||||
super(parser, astStack, nodeFactory, parserFactory);
|
||||
|
||||
this.nodeFactory = nodeFactory;
|
||||
|
@ -408,7 +407,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
*/
|
||||
public void consumeTemplateArgumentTypeId() {
|
||||
// TODO is this necessary? It should be able to tell if it looks like an id expression
|
||||
IParser<IASTExpression> secondaryParser = parserFactory.getExpressionParser(parser);
|
||||
ISecondaryParser<IASTExpression> secondaryParser = parserFactory.getExpressionParser(stream, options);
|
||||
IASTExpression result = runSecondaryParser(secondaryParser);
|
||||
|
||||
// The grammar rule allows assignment_expression, but the ambiguity
|
||||
|
@ -459,7 +458,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
* ::= 'operator' overloadable_operator
|
||||
*/
|
||||
public void consumeOperatorName() {
|
||||
List<IToken> tokens = parser.getRuleTokens();
|
||||
List<IToken> tokens = stream.getRuleTokens();
|
||||
tokens = tokens.subList(1, tokens.size());
|
||||
OverloadableOperator operator = getOverloadableOperator(tokens);
|
||||
|
||||
|
@ -515,7 +514,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
* ::= '~' identifier_token
|
||||
*/
|
||||
public void consumeDestructorName() {
|
||||
char[] chars = ("~" + parser.getRightIToken()).toCharArray(); //$NON-NLS-1$
|
||||
char[] chars = ("~" + stream.getRightIToken()).toCharArray(); //$NON-NLS-1$
|
||||
|
||||
IASTName name = nodeFactory.newName(chars);
|
||||
setOffsetAndLength(name);
|
||||
|
@ -535,7 +534,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
|
||||
IASTName newName = nodeFactory.newName(newChars);
|
||||
|
||||
int offset = offset(parser.getLeftIToken());
|
||||
int offset = offset(stream.getLeftIToken());
|
||||
int length = offset - endOffset(oldName);
|
||||
ParserUtil.setOffsetAndLength(newName, offset, length);
|
||||
|
||||
|
@ -627,7 +626,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
|
||||
// bug 234463, fix for content assist to work in this case
|
||||
int TK_EOC = TK_EndOfCompletion; // TODO: change this in the grammar file
|
||||
List<IToken> tokens = parser.getRuleTokens();
|
||||
List<IToken> tokens = stream.getRuleTokens();
|
||||
if(matchTokens(tokens, tokenMap,
|
||||
TK_for, TK_LeftParen, TK_Completion, TK_EOC, TK_EOC, TK_EOC, TK_EOC)) {
|
||||
IASTName name = createName(tokens.get(2));
|
||||
|
@ -764,13 +763,6 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
for(IASTName name : reverseIterable(names))
|
||||
qualifiedName.addName(name);
|
||||
|
||||
if(qualifiedName instanceof CPPASTQualifiedName) {
|
||||
// compute the signature, find the tokens that make up the name
|
||||
List<IToken> nameTokens = ParserUtil.tokenOffsetSubList(parser.getRuleTokens(), startOffset, endOffset);
|
||||
String signature = createStringRepresentation(nameTokens);
|
||||
((CPPASTQualifiedName)qualifiedName).setSignature(signature);
|
||||
}
|
||||
|
||||
// there must be a dummy name in the AST after the last double colon, this happens with pointer to member names
|
||||
if(endsWithColonColon) {
|
||||
IASTName dummyName = nodeFactory.newName();
|
||||
|
@ -782,36 +774,6 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
}
|
||||
|
||||
|
||||
private String createStringRepresentation(List<IToken> nameTokens) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
IToken prev = null;
|
||||
for(IToken t : nameTokens) {
|
||||
if(needSpaceBetween(prev, t))
|
||||
sb.append(' ');
|
||||
sb.append(t.toString());
|
||||
prev = t;
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
private boolean needSpaceBetween(IToken prev, IToken iter) {
|
||||
// this logic was copied from BasicTokenDuple.createCharArrayRepresentation()
|
||||
if(prev == null)
|
||||
return false;
|
||||
|
||||
int prevKind = baseKind(prev);
|
||||
int iterKind = baseKind(iter);
|
||||
|
||||
return prevKind != TK_ColonColon &&
|
||||
prevKind != TK_identifier &&
|
||||
prevKind != TK_LT &&
|
||||
prevKind != TK_Tilde &&
|
||||
iterKind != TK_GT &&
|
||||
prevKind != TK_LeftBracket &&
|
||||
iterKind != TK_RightBracket &&
|
||||
iterKind != TK_ColonColon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Consumes grammar sub-rules of the following form:
|
||||
|
@ -879,7 +841,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
public void consumeNamespaceAliasDefinition() {
|
||||
IASTName qualifiedName = subRuleQualifiedName(false);
|
||||
|
||||
IASTName alias = createName(parser.getRuleTokens().get(1));
|
||||
IASTName alias = createName(stream.getRuleTokens().get(1));
|
||||
ICPPASTNamespaceAlias namespaceAlias = nodeFactory.newNamespaceAlias(alias, qualifiedName);
|
||||
|
||||
setOffsetAndLength(namespaceAlias);
|
||||
|
@ -922,7 +884,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
* | 'extern' 'stringlit' <openscope-ast> declaration
|
||||
*/
|
||||
public void consumeLinkageSpecification() {
|
||||
String name = parser.getRuleTokens().get(1).toString();
|
||||
String name = stream.getRuleTokens().get(1).toString();
|
||||
ICPPASTLinkageSpecification linkageSpec = nodeFactory.newLinkageSpecification(name);
|
||||
|
||||
for(Object declaration : astStack.closeScope())
|
||||
|
@ -1122,7 +1084,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
}
|
||||
|
||||
// the only way there could be a typename token
|
||||
for(IToken token : parser.getRuleTokens()) {
|
||||
for(IToken token : stream.getRuleTokens()) {
|
||||
if(baseKind(token) == TK_typename) {
|
||||
declSpec.setIsTypename(true);
|
||||
break;
|
||||
|
@ -1142,7 +1104,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
*/
|
||||
public void consumeTypeSpecifierElaborated(boolean hasOptionalTemplateKeyword) {
|
||||
IASTName name = subRuleQualifiedName(hasOptionalTemplateKeyword);
|
||||
int kind = getElaboratedTypeSpecifier(parser.getLeftIToken());
|
||||
int kind = getElaboratedTypeSpecifier(stream.getLeftIToken());
|
||||
|
||||
IASTElaboratedTypeSpecifier typeSpecifier = nodeFactory.newElaboratedTypeSpecifier(kind, name);
|
||||
|
||||
|
@ -1172,7 +1134,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
List<Object> declarators = hasDeclaratorList ? astStack.closeScope() : Collections.emptyList();
|
||||
ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) astStack.pop(); // may be null
|
||||
|
||||
List<IToken> ruleTokens = parser.getRuleTokens();
|
||||
List<IToken> ruleTokens = stream.getRuleTokens();
|
||||
IToken nameToken = null;
|
||||
|
||||
|
||||
|
@ -1184,7 +1146,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
// In the case that a single completion token is parsed then it needs
|
||||
// to be interpreted as a named type specifier for content assist to work.
|
||||
else if(matchTokens(ruleTokens, tokenMap, TK_Completion, TK_EndOfCompletion)) {
|
||||
IASTName name = createName(parser.getLeftIToken());
|
||||
IASTName name = createName(stream.getLeftIToken());
|
||||
declSpec = nodeFactory.newTypedefNameSpecifier(name);
|
||||
ParserUtil.setOffsetAndLength(declSpec, offset(name), length(name));
|
||||
declarators = Collections.emptyList(); // throw away the bogus declarator
|
||||
|
@ -1193,7 +1155,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
// can happen if implicit int is used
|
||||
else if(declSpec == null) {
|
||||
declSpec = nodeFactory.newSimpleDeclSpecifier();
|
||||
ParserUtil.setOffsetAndLength(declSpec, parser.getLeftIToken().getStartOffset(), 0);
|
||||
ParserUtil.setOffsetAndLength(declSpec, stream.getLeftIToken().getStartOffset(), 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1213,7 +1175,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
for(IToken t : ruleTokens.subList(0, ruleTokens.size()-1))
|
||||
setSpecifier(declSpec, t);
|
||||
|
||||
int offset = offset(parser.getLeftIToken());
|
||||
int offset = offset(stream.getLeftIToken());
|
||||
int length = endOffset(ruleTokens.get(ruleTokens.size()-2)) - offset;
|
||||
ParserUtil.setOffsetAndLength(declSpec, offset, length);
|
||||
|
||||
|
@ -1253,7 +1215,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
IASTDeclarator nested = declarator.getNestedDeclarator();
|
||||
|
||||
ICPPASTSimpleDeclSpecifier simpleDeclSpec = nodeFactory.newSimpleDeclSpecifier(); // empty
|
||||
ParserUtil.setOffsetAndLength(simpleDeclSpec, parser.getLeftIToken().getStartOffset(), 0);
|
||||
ParserUtil.setOffsetAndLength(simpleDeclSpec, stream.getLeftIToken().getStartOffset(), 0);
|
||||
|
||||
if(!classNames.isEmpty() && nested != null && ParserUtil.isSameName(name, classNames.getLast())) {
|
||||
|
||||
|
@ -1314,7 +1276,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
if(!(declarator instanceof IASTFunctionDeclarator))
|
||||
return;
|
||||
|
||||
IParser<IASTDeclarator> secondaryParser = parserFactory.getNoFunctionDeclaratorParser(parser);
|
||||
ISecondaryParser<IASTDeclarator> secondaryParser = parserFactory.getNoFunctionDeclaratorParser(stream, options);
|
||||
IASTDeclarator notFunctionDeclarator = runSecondaryParser(secondaryParser);
|
||||
|
||||
if(notFunctionDeclarator == null)
|
||||
|
@ -1405,7 +1367,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public void consumeClassHead(boolean hasNestedNameSpecifier) {
|
||||
int key = getCompositeTypeSpecifier(parser.getLeftIToken());
|
||||
int key = getCompositeTypeSpecifier(stream.getLeftIToken());
|
||||
List<Object> baseSpecifiers = astStack.closeScope();
|
||||
// may be null, but if it is then hasNestedNameSpecifier == false
|
||||
IASTName className = (IASTName) astStack.pop();
|
||||
|
@ -1491,7 +1453,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
int endOffset = endOffset(nestedNames.getFirst()); // temporary
|
||||
|
||||
// find the last double colon by searching for it
|
||||
for(IToken t : reverseIterable(parser.getRuleTokens())) {
|
||||
for(IToken t : reverseIterable(stream.getRuleTokens())) {
|
||||
if(baseKind(t) == TK_ColonColon) {
|
||||
endOffset = endOffset(t);
|
||||
break;
|
||||
|
@ -1556,7 +1518,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
}
|
||||
|
||||
if(hasDeclarator) {
|
||||
int endOffset = endOffset(parser.getRightIToken());
|
||||
int endOffset = endOffset(stream.getRightIToken());
|
||||
addFunctionModifier(declarator, endOffset);
|
||||
}
|
||||
else {
|
||||
|
@ -1571,7 +1533,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
*/
|
||||
public void consumeAbstractDeclaratorEmpty() {
|
||||
IASTName name = nodeFactory.newName();
|
||||
ParserUtil.setOffsetAndLength(name, offset(parser.getLeftIToken())+1, 0);
|
||||
ParserUtil.setOffsetAndLength(name, offset(stream.getLeftIToken())+1, 0);
|
||||
IASTDeclarator declarator = nodeFactory.newDeclarator(name);
|
||||
setOffsetAndLength(declarator);
|
||||
astStack.push(declarator);
|
||||
|
@ -1610,7 +1572,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
|
||||
if(declSpec == null) { // can happen if implicit int is used
|
||||
declSpec = nodeFactory.newSimpleDeclSpecifier();
|
||||
ParserUtil.setOffsetAndLength(declSpec, parser.getLeftIToken().getStartOffset(), 0);
|
||||
ParserUtil.setOffsetAndLength(declSpec, stream.getLeftIToken().getStartOffset(), 0);
|
||||
}
|
||||
else if(disambiguateToConstructor(declSpec, declarator)) {
|
||||
declSpec = (IASTDeclSpecifier) astStack.pop();
|
||||
|
@ -1689,7 +1651,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
if(name == null)
|
||||
name = nodeFactory.newName();
|
||||
|
||||
int type = getTemplateParameterType(parser.getLeftIToken());
|
||||
int type = getTemplateParameterType(stream.getLeftIToken());
|
||||
|
||||
ICPPASTSimpleTypeTemplateParameter templateParameter = nodeFactory.newSimpleTypeTemplateParameter(type, name, typeId);
|
||||
|
||||
|
@ -1723,7 +1685,7 @@ public class CPPBuildASTParserAction extends BuildASTParserAction {
|
|||
* Yes its a hack.
|
||||
*/
|
||||
public void consumeTemplateParamterDeclaration() {
|
||||
IParser<ICPPASTTemplateParameter> typeParameterParser = parserFactory.getTemplateTypeParameterParser(parser);
|
||||
ISecondaryParser<ICPPASTTemplateParameter> typeParameterParser = parserFactory.getTemplateTypeParameterParser(stream, options);
|
||||
IASTNode alternate = runSecondaryParser(typeParameterParser);
|
||||
|
||||
if(alternate == null)
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.action.cpp;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoCastExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoFunctionDeclaratorParser;
|
||||
|
@ -31,24 +34,24 @@ public class CPPSecondaryParserFactory implements ICPPSecondaryParserFactory {
|
|||
}
|
||||
|
||||
|
||||
public IParser<ICPPASTTemplateParameter> getTemplateTypeParameterParser(IParserActionTokenProvider parser) {
|
||||
return new CPPTemplateTypeParameterParser(parser);
|
||||
public ISecondaryParser<ICPPASTTemplateParameter> getTemplateTypeParameterParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPTemplateTypeParameterParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTDeclarator> getNoFunctionDeclaratorParser(IParserActionTokenProvider parser) {
|
||||
return new CPPNoFunctionDeclaratorParser(parser);
|
||||
public ISecondaryParser<IASTDeclarator> getNoFunctionDeclaratorParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPNoFunctionDeclaratorParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new CPPExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getNoCastExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new CPPNoCastExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getNoCastExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPNoCastExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getSizeofExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new CPPSizeofExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getSizeofExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPSizeofExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.action.cpp;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -24,8 +27,8 @@ import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
|||
*/
|
||||
public interface ICPPSecondaryParserFactory extends ISecondaryParserFactory {
|
||||
|
||||
IParser<ICPPASTTemplateParameter> getTemplateTypeParameterParser(IParserActionTokenProvider parser);
|
||||
ISecondaryParser<ICPPASTTemplateParameter> getTemplateTypeParameterParser(ITokenStream stream, Set<IParser.Options> options);
|
||||
|
||||
IParser<IASTDeclarator> getNoFunctionDeclaratorParser(IParserActionTokenProvider parser);
|
||||
ISecondaryParser<IASTDeclarator> getNoFunctionDeclaratorParser(ITokenStream stream, Set<IParser.Options> options);
|
||||
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTFieldDesignator;
|
|||
import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.c.ICNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.c.IGCCASTArrayRangeDesignator;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
|
||||
|
||||
|
@ -30,7 +30,7 @@ public class GCCBuildASTParserAction extends GNUBuildASTParserAction {
|
|||
|
||||
private C99BuildASTParserAction baseAction;
|
||||
|
||||
public GCCBuildASTParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, ICNodeFactory nodeFactory) {
|
||||
public GCCBuildASTParserAction(ITokenStream parser, ScopedStack<Object> astStack, ICNodeFactory nodeFactory) {
|
||||
super(parser, astStack, nodeFactory);
|
||||
this.nodeFactory = nodeFactory;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ public class GCCBuildASTParserAction extends GNUBuildASTParserAction {
|
|||
* ::= identifier_token ':'
|
||||
*/
|
||||
public void consumeDesignatorField() {
|
||||
IASTName name = createName(parser.getLeftIToken());
|
||||
IASTName name = createName(stream.getLeftIToken());
|
||||
ICASTFieldDesignator designator = nodeFactory.newFieldDesignator(name);
|
||||
setOffsetAndLength(designator);
|
||||
astStack.push(designator);
|
||||
|
|
|
@ -10,10 +10,13 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.action.gnu;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99ExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99NoCastExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.gcc.GCCSizeofExpressionParser;
|
||||
|
@ -27,15 +30,15 @@ public class GCCSecondaryParserFactory implements ISecondaryParserFactory {
|
|||
}
|
||||
|
||||
|
||||
public IParser<IASTExpression> getExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new C99ExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new C99ExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getNoCastExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new C99NoCastExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getNoCastExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new C99NoCastExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getSizeofExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new GCCSizeofExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getSizeofExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new GCCSizeofExpressionParser(stream, options);
|
||||
}
|
||||
}
|
|
@ -19,8 +19,8 @@ import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.INodeFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.AbstractParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.gcc.GCCParsersym;
|
||||
|
@ -31,7 +31,7 @@ public class GNUBuildASTParserAction extends AbstractParserAction {
|
|||
|
||||
private final TokenMap tokenMap;
|
||||
|
||||
public GNUBuildASTParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, INodeFactory nodeFactory) {
|
||||
public GNUBuildASTParserAction(ITokenStream parser, ScopedStack<Object> astStack, INodeFactory nodeFactory) {
|
||||
super(parser, astStack);
|
||||
|
||||
this.nodeFactory = nodeFactory;
|
||||
|
@ -64,7 +64,7 @@ public class GNUBuildASTParserAction extends AbstractParserAction {
|
|||
*
|
||||
*/
|
||||
public void consumeDeclarationASM() {
|
||||
List<IToken> tokens = parser.getRuleTokens();
|
||||
List<IToken> tokens = stream.getRuleTokens();
|
||||
|
||||
int firstToken = 2;
|
||||
if(tokenMap.mapKind(tokens.get(1).getKind()) == GCCParsersym.TK_volatile)
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTSimpleDeclSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.IGPPASTSimpleDeclSpecifier;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.gpp.GPPParsersym;
|
||||
|
@ -32,7 +32,7 @@ public class GPPBuildASTParserAction extends GNUBuildASTParserAction {
|
|||
private CPPBuildASTParserAction baseAction;
|
||||
|
||||
|
||||
public GPPBuildASTParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, ICPPNodeFactory nodeFactory) {
|
||||
public GPPBuildASTParserAction(ITokenStream parser, ScopedStack<Object> astStack, ICPPNodeFactory nodeFactory) {
|
||||
super(parser, astStack, nodeFactory);
|
||||
this.nodeFactory = nodeFactory;
|
||||
}
|
||||
|
|
|
@ -10,11 +10,14 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.action.gnu;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.ICPPSecondaryParserFactory;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPNoCastExpressionParser;
|
||||
|
@ -32,24 +35,24 @@ public class GPPSecondaryParserFactory implements ICPPSecondaryParserFactory {
|
|||
}
|
||||
|
||||
|
||||
public IParser<ICPPASTTemplateParameter> getTemplateTypeParameterParser(IParserActionTokenProvider parser) {
|
||||
return new CPPTemplateTypeParameterParser(parser);
|
||||
public ISecondaryParser<ICPPASTTemplateParameter> getTemplateTypeParameterParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPTemplateTypeParameterParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTDeclarator> getNoFunctionDeclaratorParser(IParserActionTokenProvider parser) {
|
||||
return new CPPNoFunctionDeclaratorParser(parser);
|
||||
public ISecondaryParser<IASTDeclarator> getNoFunctionDeclaratorParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPNoFunctionDeclaratorParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new CPPExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getNoCastExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new CPPNoCastExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getNoCastExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new CPPNoCastExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getSizeofExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new GPPSizeofExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getSizeofExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new GPPSizeofExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,17 +10,19 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.c99;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser.Options;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.ANSICParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.c99.C99Parser;
|
||||
|
||||
|
@ -40,14 +42,10 @@ public class C99Language extends BaseExtensibleLanguage {
|
|||
return DEFAULT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IParser<IASTTranslationUnit> getParser() {
|
||||
return new C99Parser();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IDOMTokenMap getTokenMap() {
|
||||
return DOMToC99TokenMap.DEFAULT_MAP;
|
||||
protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Set<Options> options) {
|
||||
return new C99Parser(scanner, DOMToC99TokenMap.DEFAULT_MAP, getBuiltinBindingsProvider(), index, options);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,10 +53,6 @@ public class C99Language extends BaseExtensibleLanguage {
|
|||
return ScannerExtensionConfiguration.createC();
|
||||
}
|
||||
|
||||
public IContributedModelBuilder createModelBuilder(@SuppressWarnings("unused") ITranslationUnit tu) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return ID;
|
||||
}
|
||||
|
@ -72,8 +66,7 @@ public class C99Language extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.C;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
private IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new ANSICParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,17 +10,18 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.cpp;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.cpp.ANSICPPParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.cpp.CPPParser;
|
||||
|
||||
|
@ -40,13 +41,8 @@ public class ISOCPPLanguage extends BaseExtensibleLanguage {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected IParser<IASTTranslationUnit> getParser() {
|
||||
return new CPPParser();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IDOMTokenMap getTokenMap() {
|
||||
return DOMToISOCPPTokenMap.DEFAULT_MAP;
|
||||
protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Set<IParser.Options> options) {
|
||||
return new CPPParser(scanner, DOMToISOCPPTokenMap.DEFAULT_MAP, getBuiltinBindingsProvider(), index, options);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -54,10 +50,6 @@ public class ISOCPPLanguage extends BaseExtensibleLanguage {
|
|||
return ScannerExtensionConfiguration.createCPP();
|
||||
}
|
||||
|
||||
public IContributedModelBuilder createModelBuilder(@SuppressWarnings("unused") ITranslationUnit tu) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return ID;
|
||||
}
|
||||
|
@ -71,7 +63,6 @@ public class ISOCPPLanguage extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.CPP;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new ANSICPPParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
|
|
|
@ -10,17 +10,18 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.gnu;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.GCCParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.GCCScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.gcc.GCCParser;
|
||||
|
||||
|
@ -40,13 +41,8 @@ public class GCCLanguage extends BaseExtensibleLanguage {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected IParser<IASTTranslationUnit> getParser() {
|
||||
return new GCCParser();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IDOMTokenMap getTokenMap() {
|
||||
return DOMToGCCTokenMap.DEFAULT_MAP;
|
||||
protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Set<IParser.Options> options) {
|
||||
return new GCCParser(scanner, DOMToGCCTokenMap.DEFAULT_MAP, getBuiltinBindingsProvider(), index, options);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -54,10 +50,6 @@ public class GCCLanguage extends BaseExtensibleLanguage {
|
|||
return GCCScannerExtensionConfiguration.getInstance();
|
||||
}
|
||||
|
||||
public IContributedModelBuilder createModelBuilder(@SuppressWarnings("unused") ITranslationUnit tu) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return ID;
|
||||
}
|
||||
|
@ -71,7 +63,6 @@ public class GCCLanguage extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.C;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new GCCParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
|
|
|
@ -10,17 +10,18 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.lrparser.gnu;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.cpp.GPPParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.cpp.GPPScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.internal.core.dom.lrparser.gpp.GPPParser;
|
||||
|
||||
|
@ -40,13 +41,8 @@ public class GPPLanguage extends BaseExtensibleLanguage {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected IParser<IASTTranslationUnit> getParser() {
|
||||
return new GPPParser();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IDOMTokenMap getTokenMap() {
|
||||
return DOMToGPPTokenMap.DEFAULT_MAP;
|
||||
protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Set<IParser.Options> options) {
|
||||
return new GPPParser(scanner, DOMToGPPTokenMap.DEFAULT_MAP, getBuiltinBindingsProvider(), index, options);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -54,10 +50,6 @@ public class GPPLanguage extends BaseExtensibleLanguage {
|
|||
return GPPScannerExtensionConfiguration.getInstance();
|
||||
}
|
||||
|
||||
public IContributedModelBuilder createModelBuilder(@SuppressWarnings("unused") ITranslationUnit tu) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return ID;
|
||||
}
|
||||
|
@ -71,7 +63,6 @@ public class GPPLanguage extends BaseExtensibleLanguage {
|
|||
return ParserLanguage.CPP;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new GPPParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -17,20 +17,29 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
||||
|
||||
public class CPPExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTExpression >
|
||||
public class CPPExpressionParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTExpression >
|
||||
, ISecondaryParser< IASTExpression >
|
||||
{
|
||||
private static ParseTable prs = new CPPExpressionParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -168,7 +177,11 @@ public class CPPExpressionParser extends PrsStream implements RuleAction , IPars
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public CPPExpressionParser() { // constructor
|
||||
|
||||
public CPPExpressionParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -187,10 +200,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTExpression parse(Set<IParser.Options> options) {
|
||||
public IASTExpression parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -233,12 +245,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, CPPExpressionParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public CPPExpressionParser(IParserActionTokenProvider parser) { // constructor
|
||||
public CPPExpressionParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(CPPExpressionParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
{
|
||||
switch (ruleNumber)
|
||||
|
@ -1421,19 +1433,19 @@ public CPPExpressionParser(IParserActionTokenProvider parser) { // constructor
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 328: ptr_operator ::= pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 328: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 328: { action. consumePointer(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 329: ptr_operator ::= pointer_hook &
|
||||
// Rule 329: ptr_operator ::= pointer_hook & pointer_hook
|
||||
//
|
||||
case 329: { action. consumeReferenceOperator(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 330: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 330: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 330: { action. consumePointerToMember(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,20 +17,29 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
||||
|
||||
public class CPPNoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTExpression >
|
||||
public class CPPNoCastExpressionParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTExpression >
|
||||
, ISecondaryParser< IASTExpression >
|
||||
{
|
||||
private static ParseTable prs = new CPPNoCastExpressionParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -168,7 +177,11 @@ public class CPPNoCastExpressionParser extends PrsStream implements RuleAction ,
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public CPPNoCastExpressionParser() { // constructor
|
||||
|
||||
public CPPNoCastExpressionParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -187,10 +200,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTExpression parse(Set<IParser.Options> options) {
|
||||
public IASTExpression parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -233,12 +245,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, CPPNoCastExpressionParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public CPPNoCastExpressionParser(IParserActionTokenProvider parser) { // constructor
|
||||
public CPPNoCastExpressionParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(CPPNoCastExpressionParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
{
|
||||
switch (ruleNumber)
|
||||
|
@ -1415,19 +1427,19 @@ public CPPNoCastExpressionParser(IParserActionTokenProvider parser) { // constr
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 327: ptr_operator ::= pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 327: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 327: { action. consumePointer(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 328: ptr_operator ::= pointer_hook &
|
||||
// Rule 328: ptr_operator ::= pointer_hook & pointer_hook
|
||||
//
|
||||
case 328: { action. consumeReferenceOperator(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 329: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 329: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 329: { action. consumePointerToMember(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,20 +17,29 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
||||
|
||||
public class CPPNoFunctionDeclaratorParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTDeclarator >
|
||||
public class CPPNoFunctionDeclaratorParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTDeclarator >
|
||||
, ISecondaryParser< IASTDeclarator >
|
||||
{
|
||||
private static ParseTable prs = new CPPNoFunctionDeclaratorParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -168,7 +177,11 @@ public class CPPNoFunctionDeclaratorParser extends PrsStream implements RuleActi
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public CPPNoFunctionDeclaratorParser() { // constructor
|
||||
|
||||
public CPPNoFunctionDeclaratorParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -187,10 +200,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTDeclarator parse(Set<IParser.Options> options) {
|
||||
public IASTDeclarator parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -233,12 +245,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, CPPNoFunctionDeclaratorParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public CPPNoFunctionDeclaratorParser(IParserActionTokenProvider parser) { // constructor
|
||||
public CPPNoFunctionDeclaratorParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(CPPNoFunctionDeclaratorParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
{
|
||||
switch (ruleNumber)
|
||||
|
@ -1415,19 +1427,19 @@ public CPPNoFunctionDeclaratorParser(IParserActionTokenProvider parser) { // co
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 326: ptr_operator ::= pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 326: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 326: { action. consumePointer(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 327: ptr_operator ::= pointer_hook &
|
||||
// Rule 327: ptr_operator ::= pointer_hook & pointer_hook
|
||||
//
|
||||
case 327: { action. consumeReferenceOperator(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 328: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 328: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 328: { action. consumePointerToMember(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,20 +17,25 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
||||
|
||||
public class CPPParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTTranslationUnit >
|
||||
public class CPPParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTTranslationUnit >
|
||||
|
||||
{
|
||||
private static ParseTable prs = new CPPParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -168,7 +173,11 @@ public class CPPParser extends PrsStream implements RuleAction , IParserActionTo
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public CPPParser() { // constructor
|
||||
|
||||
public CPPParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -187,10 +196,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTTranslationUnit parse(Set<IParser.Options> options) {
|
||||
public IASTTranslationUnit parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -220,25 +228,6 @@ public String getName() {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private ITokenMap tokenMap = null;
|
||||
|
||||
public void setTokens(List<IToken> tokens) {
|
||||
resetTokenStream();
|
||||
addToken(new Token(null, 0, 0, 0)); // dummy token
|
||||
for(IToken token : tokens) {
|
||||
token.setKind(tokenMap.mapKind(token.getKind()));
|
||||
addToken(token);
|
||||
}
|
||||
addToken(new Token(null, 0, 0, CPPParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public CPPParser(IParserActionTokenProvider parser) { // constructor
|
||||
tokenMap = new TokenMap(CPPParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
{
|
||||
switch (ruleNumber)
|
||||
|
@ -1421,19 +1410,19 @@ public CPPParser(IParserActionTokenProvider parser) { // constructor
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 328: ptr_operator ::= pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 328: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 328: { action. consumePointer(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 329: ptr_operator ::= pointer_hook &
|
||||
// Rule 329: ptr_operator ::= pointer_hook & pointer_hook
|
||||
//
|
||||
case 329: { action. consumeReferenceOperator(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 330: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 330: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 330: { action. consumePointerToMember(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,20 +17,29 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
||||
|
||||
public class CPPSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTExpression >
|
||||
public class CPPSizeofExpressionParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTExpression >
|
||||
, ISecondaryParser< IASTExpression >
|
||||
{
|
||||
private static ParseTable prs = new CPPSizeofExpressionParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -168,7 +177,11 @@ public class CPPSizeofExpressionParser extends PrsStream implements RuleAction ,
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public CPPSizeofExpressionParser() { // constructor
|
||||
|
||||
public CPPSizeofExpressionParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -187,10 +200,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTExpression parse(Set<IParser.Options> options) {
|
||||
public IASTExpression parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -233,12 +245,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, CPPSizeofExpressionParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public CPPSizeofExpressionParser(IParserActionTokenProvider parser) { // constructor
|
||||
public CPPSizeofExpressionParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(CPPSizeofExpressionParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
{
|
||||
switch (ruleNumber)
|
||||
|
@ -1409,19 +1421,19 @@ public CPPSizeofExpressionParser(IParserActionTokenProvider parser) { // constr
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 326: ptr_operator ::= pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 326: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 326: { action. consumePointer(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 327: ptr_operator ::= pointer_hook &
|
||||
// Rule 327: ptr_operator ::= pointer_hook & pointer_hook
|
||||
//
|
||||
case 327: { action. consumeReferenceOperator(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 328: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 328: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 328: { action. consumePointerToMember(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,13 +17,20 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
|
@ -32,7 +39,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
|||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter;
|
||||
|
||||
public class CPPTemplateTypeParameterParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< ICPPASTTemplateParameter >
|
||||
public class CPPTemplateTypeParameterParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< ICPPASTTemplateParameter >
|
||||
, ISecondaryParser< ICPPASTTemplateParameter >
|
||||
{
|
||||
private static ParseTable prs = new CPPTemplateTypeParameterParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -170,7 +179,11 @@ public class CPPTemplateTypeParameterParser extends PrsStream implements RuleAct
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public CPPTemplateTypeParameterParser() { // constructor
|
||||
|
||||
public CPPTemplateTypeParameterParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -189,10 +202,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public ICPPASTTemplateParameter parse(Set<IParser.Options> options) {
|
||||
public ICPPASTTemplateParameter parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -235,12 +247,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, CPPTemplateTypeParameterParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public CPPTemplateTypeParameterParser(IParserActionTokenProvider parser) { // constructor
|
||||
public CPPTemplateTypeParameterParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(CPPTemplateTypeParameterParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
{
|
||||
switch (ruleNumber)
|
||||
|
@ -1423,19 +1435,19 @@ public CPPTemplateTypeParameterParser(IParserActionTokenProvider parser) { // c
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 328: ptr_operator ::= pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 328: ptr_operator ::= pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 328: { action. consumePointer(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 329: ptr_operator ::= pointer_hook &
|
||||
// Rule 329: ptr_operator ::= pointer_hook & pointer_hook
|
||||
//
|
||||
case 329: { action. consumeReferenceOperator(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 330: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * <openscope-ast> cv_qualifier_seq_opt
|
||||
// Rule 330: ptr_operator ::= dcolon_opt nested_name_specifier pointer_hook * pointer_hook <openscope-ast> cv_qualifier_seq_opt
|
||||
//
|
||||
case 330: { action. consumePointerToMember(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -17,13 +17,16 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
|
||||
|
@ -32,7 +35,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.c99.C99SecondaryParserFactory;
|
|||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCSecondaryParserFactory;
|
||||
|
||||
public class GCCParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTTranslationUnit >
|
||||
public class GCCParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTTranslationUnit >
|
||||
|
||||
{
|
||||
private static ParseTable prs = new GCCParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -170,7 +175,11 @@ public class GCCParser extends PrsStream implements RuleAction , IParserActionTo
|
|||
private C99BuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public GCCParser() { // constructor
|
||||
|
||||
public GCCParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -194,10 +203,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTTranslationUnit parse(Set<IParser.Options> options) {
|
||||
public IASTTranslationUnit parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -227,25 +235,6 @@ public String getName() {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private ITokenMap tokenMap = null;
|
||||
|
||||
public void setTokens(List<IToken> tokens) {
|
||||
resetTokenStream();
|
||||
addToken(new Token(null, 0, 0, 0)); // dummy token
|
||||
for(IToken token : tokens) {
|
||||
token.setKind(tokenMap.mapKind(token.getKind()));
|
||||
addToken(token);
|
||||
}
|
||||
addToken(new Token(null, 0, 0, GCCParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public GCCParser(IParserActionTokenProvider parser) { // constructor
|
||||
tokenMap = new TokenMap(GCCParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
private GCCBuildASTParserAction gnuAction;
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
|
|
|
@ -17,13 +17,20 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.internal.core.dom.parser.c.CNodeFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
|
||||
|
@ -32,7 +39,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.c99.C99SecondaryParserFactory;
|
|||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GCCSecondaryParserFactory;
|
||||
|
||||
public class GCCSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTExpression >
|
||||
public class GCCSizeofExpressionParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTExpression >
|
||||
, ISecondaryParser< IASTExpression >
|
||||
{
|
||||
private static ParseTable prs = new GCCSizeofExpressionParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -170,7 +179,11 @@ public class GCCSizeofExpressionParser extends PrsStream implements RuleAction ,
|
|||
private C99BuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public GCCSizeofExpressionParser() { // constructor
|
||||
|
||||
public GCCSizeofExpressionParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -194,10 +207,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTExpression parse(Set<IParser.Options> options) {
|
||||
public IASTExpression parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -240,12 +252,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, GCCSizeofExpressionParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public GCCSizeofExpressionParser(IParserActionTokenProvider parser) { // constructor
|
||||
public GCCSizeofExpressionParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(GCCSizeofExpressionParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
private GCCBuildASTParserAction gnuAction;
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
|
|
|
@ -17,13 +17,16 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
|
@ -33,7 +36,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
|||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPSecondaryParserFactory;
|
||||
|
||||
public class GPPParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTTranslationUnit >
|
||||
public class GPPParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTTranslationUnit >
|
||||
|
||||
{
|
||||
private static ParseTable prs = new GPPParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -171,7 +176,11 @@ public class GPPParser extends PrsStream implements RuleAction , IParserActionTo
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public GPPParser() { // constructor
|
||||
|
||||
public GPPParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -195,10 +204,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTTranslationUnit parse(Set<IParser.Options> options) {
|
||||
public IASTTranslationUnit parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -228,25 +236,6 @@ public String getName() {
|
|||
}
|
||||
|
||||
|
||||
|
||||
private ITokenMap tokenMap = null;
|
||||
|
||||
public void setTokens(List<IToken> tokens) {
|
||||
resetTokenStream();
|
||||
addToken(new Token(null, 0, 0, 0)); // dummy token
|
||||
for(IToken token : tokens) {
|
||||
token.setKind(tokenMap.mapKind(token.getKind()));
|
||||
addToken(token);
|
||||
}
|
||||
addToken(new Token(null, 0, 0, GPPParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public GPPParser(IParserActionTokenProvider parser) { // constructor
|
||||
tokenMap = new TokenMap(GPPParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
private GPPBuildASTParserAction gnuAction;
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
|
@ -2037,33 +2026,45 @@ private GPPBuildASTParserAction gnuAction;
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 584: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers
|
||||
// Rule 580: typeof_type_specifier ::= typeof unary_expression
|
||||
//
|
||||
case 584: { gnuAction.consumeDeclarationSpecifiersTypeof(); break;
|
||||
case 580: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 597: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator
|
||||
// Rule 581: typeof_type_specifier ::= typeof ( type_id )
|
||||
//
|
||||
case 597: { action. consumeDeclaratorWithPointer(true); break;
|
||||
case 581: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 599: simple_type_specifier ::= _Complex
|
||||
// Rule 585: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers
|
||||
//
|
||||
case 599: { action. consumeToken(); break;
|
||||
case 585: { gnuAction.consumeDeclarationSpecifiersTypeof(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 600: simple_type_specifier ::= _Imaginary
|
||||
// Rule 598: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator
|
||||
//
|
||||
case 598: { action. consumeDeclaratorWithPointer(true); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 600: simple_type_specifier ::= _Complex
|
||||
//
|
||||
case 600: { action. consumeToken(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 601: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers
|
||||
// Rule 601: simple_type_specifier ::= _Imaginary
|
||||
//
|
||||
case 601: { gnuAction.consumeDeclarationSpecifiersSimple(); break;
|
||||
case 601: { action. consumeToken(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 602: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers
|
||||
//
|
||||
case 602: { gnuAction.consumeDeclarationSpecifiersSimple(); break;
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -83,12 +83,12 @@ public interface GPPParsersym {
|
|||
TK_integer = 56,
|
||||
TK_floating = 57,
|
||||
TK_charconst = 58,
|
||||
TK_stringlit = 42,
|
||||
TK_stringlit = 43,
|
||||
TK_identifier = 1,
|
||||
TK_Completion = 2,
|
||||
TK_EndOfCompletion = 11,
|
||||
TK_Invalid = 130,
|
||||
TK_LeftBracket = 70,
|
||||
TK_LeftBracket = 69,
|
||||
TK_LeftParen = 3,
|
||||
TK_Dot = 127,
|
||||
TK_DotStar = 97,
|
||||
|
@ -135,7 +135,7 @@ public interface GPPParsersym {
|
|||
TK_RightBracket = 125,
|
||||
TK_RightParen = 71,
|
||||
TK_RightBrace = 80,
|
||||
TK_SemiColon = 43,
|
||||
TK_SemiColon = 42,
|
||||
TK_LeftBrace = 72,
|
||||
TK_typeof = 27,
|
||||
TK___alignof__ = 59,
|
||||
|
@ -143,7 +143,7 @@ public interface GPPParsersym {
|
|||
TK___declspec = 7,
|
||||
TK_MAX = 108,
|
||||
TK_MIN = 109,
|
||||
TK_ERROR_TOKEN = 69,
|
||||
TK_ERROR_TOKEN = 70,
|
||||
TK_EOF_TOKEN = 128;
|
||||
|
||||
public final static String orderedTerminalSymbols[] = {
|
||||
|
@ -189,8 +189,8 @@ public interface GPPParsersym {
|
|||
"typedef",
|
||||
"Plus",
|
||||
"Minus",
|
||||
"stringlit",
|
||||
"SemiColon",
|
||||
"stringlit",
|
||||
"PlusPlus",
|
||||
"MinusMinus",
|
||||
"Bang",
|
||||
|
@ -216,8 +216,8 @@ public interface GPPParsersym {
|
|||
"namespace",
|
||||
"throw",
|
||||
"using",
|
||||
"ERROR_TOKEN",
|
||||
"LeftBracket",
|
||||
"ERROR_TOKEN",
|
||||
"RightParen",
|
||||
"LeftBrace",
|
||||
"Colon",
|
||||
|
|
|
@ -17,13 +17,20 @@ import lpg.lpgjavaruntime.*;
|
|||
|
||||
import java.util.*;
|
||||
import org.eclipse.cdt.core.dom.ast.*;
|
||||
import org.eclipse.cdt.core.dom.lrparser.CPreprocessorAdapter;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ITokenCollector;
|
||||
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.*;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
|
||||
|
@ -33,7 +40,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPSecondaryParserFactory;
|
|||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPBuildASTParserAction;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.gnu.GPPSecondaryParserFactory;
|
||||
|
||||
public class GPPSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser< IASTExpression >
|
||||
public class GPPSizeofExpressionParser extends PrsStream implements RuleAction, ITokenStream,
|
||||
ITokenCollector, IParser< IASTExpression >
|
||||
, ISecondaryParser< IASTExpression >
|
||||
{
|
||||
private static ParseTable prs = new GPPSizeofExpressionParserprs();
|
||||
private FixedBacktrackingParser btParser;
|
||||
|
@ -171,7 +180,11 @@ public class GPPSizeofExpressionParser extends PrsStream implements RuleAction ,
|
|||
private CPPBuildASTParserAction action;
|
||||
private IASTCompletionNode compNode;
|
||||
|
||||
public GPPSizeofExpressionParser() { // constructor
|
||||
|
||||
public GPPSizeofExpressionParser(IScanner scanner, IDOMTokenMap tokenMap, IBuiltinBindingsProvider builtinBindingsProvider, IIndex index, Set<IParser.Options> options) {
|
||||
initActions(options);
|
||||
action.initializeTranslationUnit(scanner, builtinBindingsProvider, index);
|
||||
CPreprocessorAdapter.runCPreprocessor(scanner, this, tokenMap);
|
||||
}
|
||||
|
||||
private void initActions(Set<IParser.Options> options) {
|
||||
|
@ -195,10 +208,9 @@ public void addToken(IToken token) {
|
|||
}
|
||||
|
||||
|
||||
public IASTExpression parse(Set<IParser.Options> options) {
|
||||
public IASTExpression parse() {
|
||||
// this has to be done, or... kaboom!
|
||||
setStreamLength(getSize());
|
||||
initActions(options);
|
||||
|
||||
final int errorRepairCount = -1; // -1 means full error handling
|
||||
parser(null, errorRepairCount); // do the actual parse
|
||||
|
@ -241,12 +253,12 @@ public void setTokens(List<IToken> tokens) {
|
|||
addToken(new Token(null, 0, 0, GPPSizeofExpressionParsersym.TK_EOF_TOKEN));
|
||||
}
|
||||
|
||||
public GPPSizeofExpressionParser(IParserActionTokenProvider parser) { // constructor
|
||||
public GPPSizeofExpressionParser(ITokenStream parser, Set<IParser.Options> options) { // constructor for creating secondary parser
|
||||
initActions(options);
|
||||
tokenMap = new TokenMap(GPPSizeofExpressionParsersym.orderedTerminalSymbols, parser.getOrderedTerminalSymbols());
|
||||
}
|
||||
|
||||
|
||||
|
||||
private GPPBuildASTParserAction gnuAction;
|
||||
|
||||
public void ruleAction(int ruleNumber)
|
||||
|
@ -2013,39 +2025,51 @@ private GPPBuildASTParserAction gnuAction;
|
|||
}
|
||||
|
||||
//
|
||||
// Rule 580: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers
|
||||
// Rule 576: typeof_type_specifier ::= typeof unary_expression
|
||||
//
|
||||
case 580: { gnuAction.consumeDeclarationSpecifiersTypeof(); break;
|
||||
case 576: { action. consumeExpressionUnaryOperator(IASTUnaryExpression.op_typeof); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 593: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator
|
||||
// Rule 577: typeof_type_specifier ::= typeof ( type_id )
|
||||
//
|
||||
case 593: { action. consumeDeclaratorWithPointer(true); break;
|
||||
case 577: { action. consumeExpressionTypeId(IASTTypeIdExpression.op_typeof); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 595: simple_type_specifier ::= _Complex
|
||||
// Rule 581: declaration_specifiers ::= <openscope-ast> typeof_declaration_specifiers
|
||||
//
|
||||
case 595: { action. consumeToken(); break;
|
||||
case 581: { gnuAction.consumeDeclarationSpecifiersTypeof(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 596: simple_type_specifier ::= _Imaginary
|
||||
// Rule 594: declarator ::= <openscope-ast> ptr_operator_seq attribute_or_decl_specifier_seq direct_declarator
|
||||
//
|
||||
case 594: { action. consumeDeclaratorWithPointer(true); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 596: simple_type_specifier ::= _Complex
|
||||
//
|
||||
case 596: { action. consumeToken(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 597: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers
|
||||
// Rule 597: simple_type_specifier ::= _Imaginary
|
||||
//
|
||||
case 597: { gnuAction.consumeDeclarationSpecifiersSimple(); break;
|
||||
case 597: { action. consumeToken(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 599: no_sizeof_type_id_start ::= ERROR_TOKEN
|
||||
// Rule 598: declaration_specifiers ::= <openscope-ast> simple_declaration_specifiers
|
||||
//
|
||||
case 599: { action. consumeEmpty(); break;
|
||||
case 598: { gnuAction.consumeDeclarationSpecifiersSimple(); break;
|
||||
}
|
||||
|
||||
//
|
||||
// Rule 600: no_sizeof_type_id_start ::= ERROR_TOKEN
|
||||
//
|
||||
case 600: { action. consumeEmpty(); break;
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -18,7 +18,7 @@ public interface GPPSizeofExpressionParsersym {
|
|||
TK__Complex = 14,
|
||||
TK__Imaginary = 15,
|
||||
TK_asm = 5,
|
||||
TK_auto = 31,
|
||||
TK_auto = 33,
|
||||
TK_bool = 16,
|
||||
TK_break = 82,
|
||||
TK_case = 83,
|
||||
|
@ -35,32 +35,32 @@ public interface GPPSizeofExpressionParsersym {
|
|||
TK_dynamic_cast = 48,
|
||||
TK_else = 129,
|
||||
TK_enum = 62,
|
||||
TK_explicit = 32,
|
||||
TK_explicit = 34,
|
||||
TK_export = 92,
|
||||
TK_extern = 33,
|
||||
TK_extern = 35,
|
||||
TK_false = 49,
|
||||
TK_float = 19,
|
||||
TK_for = 87,
|
||||
TK_friend = 34,
|
||||
TK_friend = 36,
|
||||
TK_goto = 88,
|
||||
TK_if = 89,
|
||||
TK_inline = 35,
|
||||
TK_inline = 37,
|
||||
TK_int = 20,
|
||||
TK_long = 21,
|
||||
TK_mutable = 36,
|
||||
TK_mutable = 38,
|
||||
TK_namespace = 67,
|
||||
TK_new = 72,
|
||||
TK_operator = 9,
|
||||
TK_private = 110,
|
||||
TK_protected = 111,
|
||||
TK_public = 112,
|
||||
TK_register = 37,
|
||||
TK_register = 39,
|
||||
TK_reinterpret_cast = 50,
|
||||
TK_return = 90,
|
||||
TK_short = 22,
|
||||
TK_signed = 23,
|
||||
TK_sizeof = 51,
|
||||
TK_static = 38,
|
||||
TK_static = 40,
|
||||
TK_static_cast = 52,
|
||||
TK_struct = 63,
|
||||
TK_switch = 91,
|
||||
|
@ -69,7 +69,7 @@ public interface GPPSizeofExpressionParsersym {
|
|||
TK_throw = 66,
|
||||
TK_try = 78,
|
||||
TK_true = 54,
|
||||
TK_typedef = 39,
|
||||
TK_typedef = 41,
|
||||
TK_typeid = 55,
|
||||
TK_typename = 13,
|
||||
TK_union = 64,
|
||||
|
@ -83,10 +83,10 @@ public interface GPPSizeofExpressionParsersym {
|
|||
TK_integer = 56,
|
||||
TK_floating = 57,
|
||||
TK_charconst = 58,
|
||||
TK_stringlit = 43,
|
||||
TK_stringlit = 42,
|
||||
TK_identifier = 1,
|
||||
TK_Completion = 2,
|
||||
TK_EndOfCompletion = 10,
|
||||
TK_EndOfCompletion = 11,
|
||||
TK_Invalid = 130,
|
||||
TK_LeftBracket = 70,
|
||||
TK_LeftParen = 3,
|
||||
|
@ -94,12 +94,12 @@ public interface GPPSizeofExpressionParsersym {
|
|||
TK_DotStar = 97,
|
||||
TK_Arrow = 113,
|
||||
TK_ArrowStar = 96,
|
||||
TK_PlusPlus = 44,
|
||||
TK_MinusMinus = 45,
|
||||
TK_PlusPlus = 43,
|
||||
TK_MinusMinus = 44,
|
||||
TK_And = 12,
|
||||
TK_Star = 11,
|
||||
TK_Plus = 40,
|
||||
TK_Minus = 41,
|
||||
TK_Star = 10,
|
||||
TK_Plus = 31,
|
||||
TK_Minus = 32,
|
||||
TK_Tilde = 8,
|
||||
TK_Bang = 46,
|
||||
TK_Slash = 98,
|
||||
|
@ -135,7 +135,7 @@ public interface GPPSizeofExpressionParsersym {
|
|||
TK_RightBracket = 125,
|
||||
TK_RightParen = 73,
|
||||
TK_RightBrace = 80,
|
||||
TK_SemiColon = 42,
|
||||
TK_SemiColon = 45,
|
||||
TK_LeftBrace = 74,
|
||||
TK_typeof = 27,
|
||||
TK___alignof__ = 59,
|
||||
|
@ -157,8 +157,8 @@ public interface GPPSizeofExpressionParsersym {
|
|||
"__declspec",
|
||||
"Tilde",
|
||||
"operator",
|
||||
"EndOfCompletion",
|
||||
"Star",
|
||||
"EndOfCompletion",
|
||||
"And",
|
||||
"typename",
|
||||
"_Complex",
|
||||
|
@ -178,6 +178,8 @@ public interface GPPSizeofExpressionParsersym {
|
|||
"const",
|
||||
"volatile",
|
||||
"virtual",
|
||||
"Plus",
|
||||
"Minus",
|
||||
"auto",
|
||||
"explicit",
|
||||
"extern",
|
||||
|
@ -187,12 +189,10 @@ public interface GPPSizeofExpressionParsersym {
|
|||
"register",
|
||||
"static",
|
||||
"typedef",
|
||||
"Plus",
|
||||
"Minus",
|
||||
"SemiColon",
|
||||
"stringlit",
|
||||
"PlusPlus",
|
||||
"MinusMinus",
|
||||
"SemiColon",
|
||||
"Bang",
|
||||
"const_cast",
|
||||
"dynamic_cast",
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
%options la=2
|
||||
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
|
||||
%options template=FixedBtParserTemplateD.g
|
||||
%options template=LRSecondaryParserTemplate.g
|
||||
|
||||
|
||||
$Import
|
||||
|
|
|
@ -23,7 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IASTStatement;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTTypeIdExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression;
|
||||
import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ScopedStack;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
|
||||
|
@ -48,7 +48,7 @@ public class UPCParserAction extends C99BuildASTParserAction {
|
|||
* @param parser
|
||||
* @param tu
|
||||
*/
|
||||
public UPCParserAction(IParserActionTokenProvider parser, ScopedStack<Object> astStack, IUPCNodeFactory nodeFactory, ISecondaryParserFactory parserFactory) {
|
||||
public UPCParserAction(ITokenStream parser, ScopedStack<Object> astStack, IUPCNodeFactory nodeFactory, ISecondaryParserFactory parserFactory) {
|
||||
super(parser, astStack, nodeFactory, parserFactory);
|
||||
this.nodeFactory = nodeFactory;
|
||||
nodeFactory.setUseC99SizeofExpressions();
|
||||
|
|
|
@ -11,10 +11,13 @@
|
|||
|
||||
package org.eclipse.cdt.core.dom.parser.upc;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ast.IASTExpression;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ISecondaryParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ISecondaryParserFactory;
|
||||
import org.eclipse.cdt.core.dom.lrparser.action.ITokenStream;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.upc.UPCExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.upc.UPCNoCastExpressionParser;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.upc.UPCSizeofExpressionParser;
|
||||
|
@ -27,16 +30,16 @@ public class UPCSecondaryParserFactory implements ISecondaryParserFactory{
|
|||
return DEFAULT_INSTANCE;
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new UPCExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new UPCExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getNoCastExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new UPCNoCastExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getNoCastExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new UPCNoCastExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
public IParser<IASTExpression> getSizeofExpressionParser(IParserActionTokenProvider parser) {
|
||||
return new UPCSizeofExpressionParser(parser);
|
||||
public ISecondaryParser<IASTExpression> getSizeofExpressionParser(ITokenStream stream, Set<IParser.Options> options) {
|
||||
return new UPCSizeofExpressionParser(stream, options);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,20 +10,24 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.core.dom.upc;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.dom.ILinkage;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.dom.lrparser.BaseExtensibleLanguage;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser;
|
||||
import org.eclipse.cdt.core.dom.lrparser.ScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.lrparser.IParser.Options;
|
||||
import org.eclipse.cdt.core.dom.parser.IBuiltinBindingsProvider;
|
||||
import org.eclipse.cdt.core.dom.parser.IScannerExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.c.ANSICParserExtensionConfiguration;
|
||||
import org.eclipse.cdt.core.dom.parser.upc.DOMToUPCTokenMap;
|
||||
import org.eclipse.cdt.core.dom.parser.upc.UPCLanguageKeywords;
|
||||
import org.eclipse.cdt.core.index.IIndex;
|
||||
import org.eclipse.cdt.core.model.ICLanguageKeywords;
|
||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.IScanner;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.upc.UPCParser;
|
||||
|
||||
|
@ -44,13 +48,8 @@ public class UPCLanguage extends BaseExtensibleLanguage {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected IDOMTokenMap getTokenMap() {
|
||||
return new DOMToUPCTokenMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IParser<IASTTranslationUnit> getParser() {
|
||||
return new UPCParser();
|
||||
protected IParser<IASTTranslationUnit> getParser(IScanner scanner, IIndex index, Set<Options> options) {
|
||||
return new UPCParser(scanner, new DOMToUPCTokenMap(), getBuiltinBindingsProvider(), index, options);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -90,7 +89,6 @@ public class UPCLanguage extends BaseExtensibleLanguage {
|
|||
return ScannerExtensionConfiguration.createC();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IBuiltinBindingsProvider getBuiltinBindingsProvider() {
|
||||
return new ANSICParserExtensionConfiguration().getBuiltinBindingsProvider();
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue