1
0
Fork 0
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:
Mike Kucera 2009-02-04 21:58:18 +00:00
parent b1f0b681d3
commit c9b3182198
85 changed files with 21758 additions and 21477 deletions

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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
--

View file

@ -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

View file

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

View file

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

View file

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

View file

@ -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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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)

View file

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

View file

@ -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

View file

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

View file

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

View file

@ -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)

View file

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

View file

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

View file

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

View file

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

View file

@ -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)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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)

View file

@ -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)

View file

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

View file

@ -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",

View file

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

View file

@ -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",

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

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

View file

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

View file

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