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