1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Bug 231381, fix for LPG backtracking parser performance problem

This commit is contained in:
Mike Kucera 2008-05-26 21:57:52 +00:00
parent 0676e6587a
commit 244d06f38a
34 changed files with 1071 additions and 56 deletions

View file

@ -13,6 +13,7 @@ Export-Package: org.eclipse.cdt.core.dom.lrparser,
org.eclipse.cdt.core.dom.lrparser.action.c99,
org.eclipse.cdt.core.dom.lrparser.c99,
org.eclipse.cdt.core.dom.lrparser.cpp,
org.eclipse.cdt.core.dom.lrparser.lpgextensions,
org.eclipse.cdt.internal.core.dom.lrparser.c99;x-internal:=true
Bundle-Localization: plugin
Bundle-Vendor: %Bundle-Vendor.0

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
-- All we need to do is import the main parser and redefine the start symbol.

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import
C99Grammar.g

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
-- This file is needed because LPG won't allow redefinition of the
-- start symbol, so C99Grammar.g cannot define a start symbol.

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.c99
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import

View file

@ -55,6 +55,7 @@ $Globals
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
./
$End

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
-- All we need to do is import the main parser and redefine the start symbol.

View file

@ -126,6 +126,7 @@ $Globals
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
./
$End

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import
CPPGrammar.g

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import
CPPGrammar.g

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
-- This file is needed because LPG won't allow redefinition of the

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.lrparser.cpp
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
-- This parser is a bit of a hack.

View file

@ -0,0 +1,703 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 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.lpgextensions;
import lpg.lpgjavaruntime.BadParseException;
import lpg.lpgjavaruntime.BadParseSymFileException;
import lpg.lpgjavaruntime.ConfigurationElement;
import lpg.lpgjavaruntime.ConfigurationStack;
import lpg.lpgjavaruntime.IntTuple;
import lpg.lpgjavaruntime.Monitor;
import lpg.lpgjavaruntime.NotBacktrackParseTableException;
import lpg.lpgjavaruntime.ParseTable;
import lpg.lpgjavaruntime.PrsStream;
import lpg.lpgjavaruntime.RuleAction;
import lpg.lpgjavaruntime.Stacks;
import lpg.lpgjavaruntime.TokenStream;
public class FixedBacktrackingParser extends Stacks
{
private Monitor monitor = null;
private int START_STATE,
NUM_RULES,
LA_STATE_OFFSET,
EOFT_SYMBOL,
ERROR_SYMBOL,
ACCEPT_ACTION,
ERROR_ACTION;
private int lastToken,
currentAction;
private TokenStream tokStream;
private ParseTable prs;
private RuleAction ra;
private IntTuple action = new IntTuple(1 << 10),
tokens;
private int actionStack[];
private boolean skipTokens = false; // true if error productions are used to skip tokens
//
// Override the getToken function in Stacks.
//
public final int getToken(int i)
{
return tokens.get(locationStack[stateStackTop + (i - 1)]);
}
public final int getCurrentRule() { return currentAction; }
public final int getFirstToken() { return tokStream.getFirstErrorToken(getToken(1)); }
public final int getFirstToken(int i) { return tokStream.getFirstErrorToken(getToken(i)); }
public final int getLastToken() { return tokStream.getLastErrorToken(lastToken); }
public final int getLastToken(int i) { int l = (i >= prs.rhs(currentAction)
? lastToken
: tokens.get(locationStack[stateStackTop + i] - 1));
return tokStream.getLastErrorToken(l);
}
public FixedBacktrackingParser(TokenStream tokStream, ParseTable prs, RuleAction ra) throws BadParseSymFileException,
NotBacktrackParseTableException
{
this.tokStream = (PrsStream) tokStream;
this.prs = prs;
this.ra = ra;
START_STATE = prs.getStartState();
NUM_RULES = prs.getNumRules();
LA_STATE_OFFSET = prs.getLaStateOffset();
EOFT_SYMBOL = prs.getEoftSymbol();
ERROR_SYMBOL = prs.getErrorSymbol();
ACCEPT_ACTION = prs.getAcceptAction();
ERROR_ACTION = prs.getErrorAction();
if (! prs.isValidForParser()) throw new BadParseSymFileException();
if (! prs.getBacktrack()) throw new NotBacktrackParseTableException();
}
public FixedBacktrackingParser(Monitor monitor, TokenStream tokStream, ParseTable prs, RuleAction ra) throws BadParseSymFileException,
NotBacktrackParseTableException
{
this(tokStream, prs, ra);
this.monitor = monitor;
}
//
// Allocate or reallocate all the stacks. Their sizes should always be the same.
//
public void reallocateOtherStacks(int start_token_index)
{
// assert(super.stateStack != null);
if (this.actionStack == null)
{
this.actionStack = new int[super.stateStack.length];
super.locationStack = new int[super.stateStack.length];
super.parseStack = new Object[super.stateStack.length];
actionStack[0] = 0;
locationStack[0] = start_token_index;
}
else if (this.actionStack.length < super.stateStack.length)
{
int old_length = this.actionStack.length;
System.arraycopy(this.actionStack, 0, this.actionStack = new int[super.stateStack.length], 0, old_length);
System.arraycopy(super.locationStack, 0, super.locationStack = new int[super.stateStack.length], 0, old_length);
System.arraycopy(super.parseStack, 0, super.parseStack = new Object[super.stateStack.length], 0, old_length);
}
return;
}
//
// Parse without attempting any Error token recovery
//
public Object parse() throws BadParseException
{
// without an argument parse() will ignore error productions
return parse(0);
}
//
// Parse input allowing up to max_error_count Error token recoveries.
// When max_error_count is 0, no Error token recoveries occur.
// When max_error is > 0, it limits the number of Error token recoveries.
// When max_error is < 0, the number of error token recoveries is unlimited.
// Also, such recoveries only require one token to be parsed beyond the recovery point.
// (normally two tokens beyond the recovery point must be parsed)
// Thus, a negative max_error_count should be used when error productions are used to
// skip tokens.
//
public Object parse(int max_error_count) throws BadParseException
{
action.reset();
tokStream.reset(); // Position at first token.
reallocateStateStack();
stateStackTop = 0;
stateStack[0] = START_STATE;
skipTokens = max_error_count < 0;
//
// The tuple tokens will eventually contain the sequence
// of tokens that resulted in a successful parse. We leave
// it up to the "Stream" implementer to define the predecessor
// of the first token as he sees fit.
//
tokens = new IntTuple(tokStream.getStreamLength());
tokens.add(tokStream.getPrevious(tokStream.peek()));
int repair_token = 0,
start_token_index = tokStream.peek(),
start_action_index = action.size(), // obviously 0
temp_stack[] = new int[1];
temp_stack[0] = START_STATE;
int initial_error_token = backtrackParse(repair_token);
for (int error_token = initial_error_token, count = 0;
error_token != 0;
error_token = backtrackParse(repair_token), count++)
{
if (count == max_error_count)
throw new BadParseException(initial_error_token);
action.reset(start_action_index);
tokStream.reset(start_token_index);
stateStackTop = temp_stack.length - 1;
System.arraycopy(temp_stack, 0, stateStack, 0, temp_stack.length);
reallocateOtherStacks(start_token_index);
backtrackParseUpToError(repair_token, error_token);
for (stateStackTop = findRecoveryStateIndex(stateStackTop);
stateStackTop >= 0;
stateStackTop = findRecoveryStateIndex(stateStackTop - 1))
{
int recovery_token = tokens.get(locationStack[stateStackTop] - 1);
repair_token = errorRepair((recovery_token >= start_token_index ? recovery_token : error_token), error_token);
if (repair_token != 0)
break;
}
if (stateStackTop < 0)
throw new BadParseException(initial_error_token);
temp_stack = new int[stateStackTop + 1];
System.arraycopy(stateStack, 0, temp_stack, 0, temp_stack.length);
start_action_index = action.size();
start_token_index = tokStream.peek();
}
if (repair_token != 0)
tokens.add(repair_token);
int t;
for (t = start_token_index; tokStream.getKind(t) != EOFT_SYMBOL; t = tokStream.getNext(t))
tokens.add(t);
tokens.add(t);
return parseActions();
}
//
// Process reductions and continue...
//
private final void process_reductions()
{
do
{
stateStackTop -= (prs.rhs(currentAction) - 1);
ra.ruleAction(currentAction);
currentAction = prs.ntAction(stateStack[stateStackTop], prs.lhs(currentAction));
} while(currentAction <= NUM_RULES);
return;
}
//
// Now do the final parse of the input based on the actions in
// the list "action" and the sequence of tokens in list "tokens".
//
private Object parseActions() throws BadParseException
{
int ti = -1,
curtok;
lastToken = tokens.get(++ti);
curtok = tokens.get(++ti);
allocateOtherStacks();
//
// Reparse the input...
//
stateStackTop = -1;
currentAction = START_STATE;
for (int i = 0; i < action.size(); i++)
{
//
// if the parser needs to stop processing,
// it may do so here.
//
if (monitor != null && monitor.isCancelled())
return null;
stateStack[++stateStackTop] = currentAction;
locationStack[stateStackTop] = ti;
currentAction = action.get(i);
if (currentAction <= NUM_RULES) // a reduce action?
{
stateStackTop--; // make reduction look like shift-reduction
process_reductions();
}
else // a shift or shift-reduce action
{
lastToken = curtok;
curtok = tokens.get(++ti);
if (currentAction > ERROR_ACTION) // a shift-reduce action?
{
currentAction -= ERROR_ACTION;
process_reductions();
}
}
}
return parseStack[0];
}
//
// Process reductions and continue...
//
private int process_backtrack_reductions(int act)
{
do
{
stateStackTop -= (prs.rhs(act) - 1);
act = prs.ntAction(stateStack[stateStackTop], prs.lhs(act));
} while(act <= NUM_RULES);
return act;
}
//
// Parse the input until either the parse completes successfully or
// an error is encountered. This function returns an integer that
// represents the last action that was executed by the parser. If
// the parse was succesful, then the tuple "action" contains the
// successful sequence of actions that was executed.
//
private int backtrackParse(int initial_token)
{
//
// Allocate configuration stack.
//
ConfigurationStack configuration_stack = new ConfigurationStack(prs);
//
// Keep parsing until we successfully reach the end of file or
// an error is encountered. The list of actions executed will
// be stored in the "action" tuple.
//
int error_token = 0,
maxStackTop = stateStackTop,
start_token = tokStream.peek(),
curtok = (initial_token > 0 ? initial_token : tokStream.getToken()),
current_kind = tokStream.getKind(curtok),
act = tAction(stateStack[stateStackTop], current_kind);
//
// The main driver loop
//
for (;;)
{
//
// if the parser needs to stop processing,
// it may do so here.
//
if (monitor != null && monitor.isCancelled())
return 0;
if (act <= NUM_RULES)
{
action.add(act); // save this reduce action
stateStackTop--;
act = process_backtrack_reductions(act);
}
else if (act > ERROR_ACTION)
{
action.add(act); // save this shift-reduce action
curtok = tokStream.getToken();
current_kind = tokStream.getKind(curtok);
act = process_backtrack_reductions(act - ERROR_ACTION);
}
else if (act < ACCEPT_ACTION)
{
action.add(act); // save this shift action
curtok = tokStream.getToken();
current_kind = tokStream.getKind(curtok);
}
else if (act == ERROR_ACTION)
{
error_token = (error_token > curtok ? error_token : curtok);
ConfigurationElement configuration = configuration_stack.pop();
if (configuration == null)
act = ERROR_ACTION;
else
{
action.reset(configuration.action_length);
act = configuration.act;
curtok = configuration.curtok;
current_kind = tokStream.getKind(curtok);
tokStream.reset(curtok == initial_token
? start_token
: tokStream.getNext(curtok));
stateStackTop = configuration.stack_top;
configuration.retrieveStack(stateStack);
continue;
}
break;
}
else if (act > ACCEPT_ACTION)
{
if (configuration_stack.findConfiguration(stateStack, stateStackTop, curtok))
act = ERROR_ACTION;
else
{
configuration_stack.push(stateStack, stateStackTop, act + 1, curtok, action.size());
act = prs.baseAction(act);
maxStackTop = stateStackTop > maxStackTop ? stateStackTop : maxStackTop;
}
continue;
}
else break; // assert(act == ACCEPT_ACTION);
try
{
stateStack[++stateStackTop] = act;
}
catch(IndexOutOfBoundsException e)
{
reallocateStateStack();
stateStack[stateStackTop] = act;
}
act = tAction(act, current_kind);
}
//System.out.println("****Number of configurations: " + configuration_stack.configurationSize());
//System.out.println("****Number of elements in stack tree: " + configuration_stack.numStateElements());
//System.out.println("****Number of elements in stacks: " + configuration_stack.stacksSize());
//System.out.println("****Number of actions: " + action.size());
//System.out.println("****Max Stack Size = " + maxStackTop);
//System.out.flush();
return (act == ERROR_ACTION ? error_token : 0);
}
private void backtrackParseUpToError(int initial_token, int error_token)
{
//
// Allocate configuration stack.
//
ConfigurationStack configuration_stack = new ConfigurationStack(prs);
//
// Keep parsing until we successfully reach the end of file or
// an error is encountered. The list of actions executed will
// be stored in the "action" tuple.
//
int start_token = tokStream.peek(),
curtok = (initial_token > 0 ? initial_token : tokStream.getToken()),
current_kind = tokStream.getKind(curtok),
act = tAction(stateStack[stateStackTop], current_kind);
tokens.add(curtok);
locationStack[stateStackTop] = tokens.size();
actionStack[stateStackTop] = action.size();
for (;;)
{
//
// if the parser needs to stop processing,
// it may do so here.
//
if (monitor != null && monitor.isCancelled())
return;
if (act <= NUM_RULES)
{
action.add(act); // save this reduce action
stateStackTop--;
act = process_backtrack_reductions(act);
}
else if (act > ERROR_ACTION)
{
action.add(act); // save this shift-reduce action
curtok = tokStream.getToken();
current_kind = tokStream.getKind(curtok);
tokens.add(curtok);
act = process_backtrack_reductions(act - ERROR_ACTION);
}
else if (act < ACCEPT_ACTION)
{
action.add(act); // save this shift action
curtok = tokStream.getToken();
current_kind = tokStream.getKind(curtok);
tokens.add(curtok);
}
else if (act == ERROR_ACTION)
{
if (curtok != error_token)
{
ConfigurationElement configuration = configuration_stack.pop();
if (configuration == null)
act = ERROR_ACTION;
else
{
action.reset(configuration.action_length);
act = configuration.act;
int next_token_index = configuration.curtok;
tokens.reset(next_token_index);
curtok = tokens.get(next_token_index - 1);
current_kind = tokStream.getKind(curtok);
tokStream.reset(curtok == initial_token
? start_token
: tokStream.getNext(curtok));
stateStackTop = configuration.stack_top;
configuration.retrieveStack(stateStack);
locationStack[stateStackTop] = tokens.size();
actionStack[stateStackTop] = action.size();
continue;
}
}
break;
}
else if (act > ACCEPT_ACTION)
{
if (configuration_stack.findConfiguration(stateStack, stateStackTop, tokens.size()))
act = ERROR_ACTION;
else
{
configuration_stack.push(stateStack, stateStackTop, act + 1, tokens.size(), action.size());
act = prs.baseAction(act);
}
continue;
}
else break; // assert(act == ACCEPT_ACTION);
stateStack[++stateStackTop] = act; // no need to check if out of bounds
locationStack[stateStackTop] = tokens.size();
actionStack[stateStackTop] = action.size();
act = tAction(act, current_kind);
}
// assert(curtok == error_token);
return;
}
private boolean repairable(int error_token)
{
//
// Allocate configuration stack.
//
ConfigurationStack configuration_stack = new ConfigurationStack(prs);
//
// Keep parsing until we successfully reach the end of file or
// an error is encountered. The list of actions executed will
// be stored in the "action" tuple.
//
int start_token = tokStream.peek(),
final_token = tokStream.getStreamLength(), // unreachable
curtok = 0,
current_kind = ERROR_SYMBOL,
act = tAction(stateStack[stateStackTop], current_kind);
for (;;)
{
if (act <= NUM_RULES)
{
stateStackTop--;
act = process_backtrack_reductions(act);
}
else if (act > ERROR_ACTION)
{
curtok = tokStream.getToken();
if (curtok > final_token) return true;
current_kind = tokStream.getKind(curtok);
act = process_backtrack_reductions(act - ERROR_ACTION);
}
else if (act < ACCEPT_ACTION)
{
curtok = tokStream.getToken();
if (curtok > final_token) return true;
current_kind = tokStream.getKind(curtok);
}
else if (act == ERROR_ACTION)
{
ConfigurationElement configuration = configuration_stack.pop();
if (configuration == null)
act = ERROR_ACTION;
else
{
stateStackTop = configuration.stack_top;
configuration.retrieveStack(stateStack);
act = configuration.act;
curtok = configuration.curtok;
if (curtok == 0)
{
current_kind = ERROR_SYMBOL;
tokStream.reset(start_token);
}
else
{
current_kind = tokStream.getKind(curtok);
tokStream.reset(tokStream.getNext(curtok));
}
continue;
}
break;
}
else if (act > ACCEPT_ACTION)
{
if (configuration_stack.findConfiguration(stateStack, stateStackTop, curtok))
act = ERROR_ACTION;
else
{
configuration_stack.push(stateStack, stateStackTop, act + 1, curtok, 0);
act = prs.baseAction(act);
}
continue;
}
else break; // assert(act == ACCEPT_ACTION);
try
{
//
// We consider a configuration to be acceptable for recovery
// if we are able to consume enough symbols in the remainining
// tokens to reach another potential recovery point past the
// original error token.
//
if ((curtok > error_token) && (final_token == tokStream.getStreamLength()))
{
//
// If the ERROR_SYMBOL is a valid Action Adjunct in the state
// "act" then we set the terminating token as the successor of
// the current token. I.e., we have to be able to parse at least
// two tokens past the resynch point before we claim victory.
//
if (recoverableState(act))
final_token = skipTokens ? curtok : tokStream.getNext(curtok);
}
stateStack[++stateStackTop] = act;
}
catch(IndexOutOfBoundsException e)
{
reallocateStateStack();
stateStack[stateStackTop] = act;
}
act = tAction(act, current_kind);
}
//
// If we can reach the end of the input successfully, we claim victory.
//
return (act == ACCEPT_ACTION);
}
private boolean recoverableState(int state)
{
for (int k = prs.asi(state); prs.asr(k) != 0; k++)
{
if (prs.asr(k) == ERROR_SYMBOL)
return true;
}
return false;
}
private int findRecoveryStateIndex(int start_index)
{
int i;
for (i = start_index; i >= 0; i--)
{
//
// If the ERROR_SYMBOL is an Action Adjunct in state stateStack[i]
// then chose i as the index of the state to recover on.
//
if (recoverableState(stateStack[i]))
break;
}
if (i >= 0) // if a recoverable state, remove null reductions, if any.
{
int k;
for (k = i - 1; k >= 0; k--)
{
if (locationStack[k] != locationStack[i])
break;
}
i = k + 1;
}
return i;
}
private int errorRepair(int recovery_token, int error_token)
{
int temp_stack[] = new int[stateStackTop + 1];
System.arraycopy(stateStack, 0, temp_stack, 0, temp_stack.length);
for (;
tokStream.getKind(recovery_token) != EOFT_SYMBOL;
recovery_token = tokStream.getNext(recovery_token))
{
tokStream.reset(recovery_token);
if (repairable(error_token))
break;
stateStackTop = temp_stack.length - 1;
System.arraycopy(temp_stack, 0, stateStack, 0, temp_stack.length);
}
if (tokStream.getKind(recovery_token) == EOFT_SYMBOL)
{
tokStream.reset(recovery_token);
if (! repairable(error_token))
{
stateStackTop = temp_stack.length - 1;
System.arraycopy(temp_stack, 0, stateStack, 0, temp_stack.length);
return 0;
}
}
//
//
//
stateStackTop = temp_stack.length - 1;
System.arraycopy(temp_stack, 0, stateStack, 0, temp_stack.length);
tokStream.reset(recovery_token);
tokens.reset(locationStack[stateStackTop] - 1);
action.reset(actionStack[stateStackTop]);
return tokStream.makeErrorToken(tokens.get(locationStack[stateStackTop] - 1),
tokStream.getPrevious(recovery_token),
error_token,
ERROR_SYMBOL);
}
private int tAction(int act, int sym)
{
act = prs.tAction(act, sym);
if (act > LA_STATE_OFFSET)
{
int next_token = tokStream.peek();
act = prs.lookAhead(act - LA_STATE_OFFSET, tokStream.getKind(next_token));
while(act > LA_STATE_OFFSET)
{
next_token = tokStream.getNext(next_token);
act = prs.lookAhead(act - LA_STATE_OFFSET, tokStream.getKind(next_token));
}
}
return act;
}
}

View file

@ -0,0 +1,290 @@
----------------------------------------------------------------------------------
-- Copyright (c) 2006, 2008 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
----------------------------------------------------------------------------------
--
-- In a parser using this template, the following macro may be redefined:
--
-- $additional_interfaces
-- $ast_class
--
-- B E G I N N I N G O F T E M P L A T E btParserTemplateD
--
%Options programming_language=java,margin=4,backtrack
%Options table,error_maps,scopes
%options prefix=TK_,
%options action=("*.java", "/.", "./")
%options ParseTable=lpg.lpgjavaruntime.ParseTable
--
-- This template requires that the name of the EOF token be set
-- to EOF_TOKEN to be consistent with LexerTemplateD and LexerTemplateE
--
$EOF
EOF_TOKEN
$End
$ERROR
ERROR_TOKEN
$End
$Define
$Header
/.
//
// Rule $rule_number: $rule_text
//./
$BeginAction
/. $Header
case $rule_number: {./
$EndAction
/. break;
}./
$BeginJava
/.$BeginAction
$symbol_declarations./
$EndJava /.$EndAction./
$NoAction
/. $Header
case $rule_number:
break;./
$BadAction
/. $Header
case $rule_number:
throw new Error("No action specified for rule " + $rule_number);./
$NullAction
/. $Header
case $rule_number:
setResult(null);
break;./
$BeginActions
/.
public void ruleAction(int ruleNumber)
{
switch (ruleNumber)
{./
$SplitActions
/.
default:
ruleAction$rule_number(ruleNumber);
break;
}
return;
}
public void ruleAction$rule_number(int ruleNumber)
{
switch (ruleNumber)
{./
$EndActions
/.
default:
break;
}
return;
}./
--
-- Macros that may be needed in a parser using this template
--
$additional_interfaces /../
$ast_class /.$ast_type./
--
-- Old deprecated macros that should NEVER be used.
--
$setSym1 /. // macro setSym1 is deprecated. Use function setResult
getParser().setSym1./
$setResult /. // macro setResult is deprecated. Use function setResult
getParser().setSym1./
$getSym /. // macro getSym is deprecated. Use function getRhsSym
getParser().getSym./
$getToken /. // macro getToken is deprecated. Use function getRhsTokenIndex
getParser().getToken./
$getIToken /. // macro getIToken is deprecated. Use function getRhsIToken
super.getIToken./
$getLeftSpan /. // macro getLeftSpan is deprecated. Use function getLeftSpan
getParser().getFirstToken./
$getRightSpan /. // macro getRightSpan is deprecated. Use function getRightSpan
getParser().getLastToken./
$End
$Globals
/.import lpg.lpgjavaruntime.*;
./
$End
$Headers
/.
public class $action_type extends PrsStream implements RuleAction$additional_interfaces
{
private static ParseTable prs = new $prs_type();
private FixedBacktrackingParser btParser;
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
public int getRhsTokenIndex(int i) { return btParser.getToken(i); }
public IToken getRhsIToken(int i) { return super.getIToken(getRhsTokenIndex(i)); }
public int getRhsFirstTokenIndex(int i) { return btParser.getFirstToken(i); }
public IToken getRhsFirstIToken(int i) { return super.getIToken(getRhsFirstTokenIndex(i)); }
public int getRhsLastTokenIndex(int i) { return btParser.getLastToken(i); }
public IToken getRhsLastIToken(int i) { return super.getIToken(getRhsLastTokenIndex(i)); }
public int getLeftSpan() { return btParser.getFirstToken(); }
public IToken getLeftIToken() { return super.getIToken(getLeftSpan()); }
public int getRightSpan() { return btParser.getLastToken(); }
public IToken getRightIToken() { return super.getIToken(getRightSpan()); }
public int getRhsErrorTokenIndex(int i)
{
int index = btParser.getToken(i);
IToken err = super.getIToken(index);
return (err instanceof ErrorToken ? index : 0);
}
public ErrorToken getRhsErrorIToken(int i)
{
int index = btParser.getToken(i);
IToken err = super.getIToken(index);
return (ErrorToken) (err instanceof ErrorToken ? err : null);
}
public $action_type(LexStream lexStream)
{
super(lexStream);
try
{
super.remapTerminalSymbols(orderedTerminalSymbols(), $prs_type.EOFT_SYMBOL);
}
catch(NullExportedSymbolsException e) {
}
catch(NullTerminalSymbolsException e) {
}
catch(UnimplementedTerminalsException e)
{
java.util.ArrayList unimplemented_symbols = e.getSymbols();
System.out.println("The Lexer will not scan the following token(s):");
for (int i = 0; i < unimplemented_symbols.size(); i++)
{
Integer id = (Integer) unimplemented_symbols.get(i);
System.out.println(" " + $sym_type.orderedTerminalSymbols[id.intValue()]);
}
System.out.println();
}
catch(UndefinedEofSymbolException e)
{
throw new Error(new UndefinedEofSymbolException
("The Lexer does not implement the Eof symbol " +
$sym_type.orderedTerminalSymbols[$prs_type.EOFT_SYMBOL]));
}
}
public String[] orderedTerminalSymbols() { return $sym_type.orderedTerminalSymbols; }
public String getTokenKindName(int kind) { return $sym_type.orderedTerminalSymbols[kind]; }
public int getEOFTokenKind() { return $prs_type.EOFT_SYMBOL; }
public PrsStream getParseStream() { return (PrsStream) this; }
//
// Report error message for given error_token.
//
public final void reportErrorTokenMessage(int error_token, String msg)
{
int firsttok = super.getFirstErrorToken(error_token),
lasttok = super.getLastErrorToken(error_token);
String location = super.getFileName() + ':' +
(firsttok > lasttok
? (super.getEndLine(lasttok) + ":" + super.getEndColumn(lasttok))
: (super.getLine(error_token) + ":" +
super.getColumn(error_token) + ":" +
super.getEndLine(error_token) + ":" +
super.getEndColumn(error_token)))
+ ": ";
super.reportError((firsttok > lasttok ? ParseErrorCodes.INSERTION_CODE : ParseErrorCodes.SUBSTITUTION_CODE), location, msg);
}
public $ast_class parser()
{
return parser(null, 0);
}
public $ast_class parser(Monitor monitor)
{
return parser(monitor, 0);
}
public $ast_class parser(int error_repair_count)
{
return parser(null, error_repair_count);
}
public $ast_class parser(Monitor monitor, int error_repair_count)
{
try
{
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{
throw new Error(new NotBacktrackParseTableException
("Regenerate $prs_type.java with -BACKTRACK option"));
}
catch (BadParseSymFileException e)
{
throw new Error(new BadParseSymFileException("Bad Parser Symbol File -- $sym_type.java"));
}
try
{
return ($ast_class) btParser.parse(error_repair_count);
}
catch (BadParseException e)
{
reset(e.error_token); // point to error token
DiagnoseParser diagnoseParser = new DiagnoseParser(this, prs);
diagnoseParser.diagnose(e.error_token);
}
return null;
}
./
$End
$Rules
/.$BeginActions./
$End
$Trailers
/.
$EndActions
}
./
$End
--
-- E N D O F T E M P L A T E
--

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -29,9 +30,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
public class C99ExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new C99ExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -136,7 +137,7 @@ public class C99ExpressionParser extends PrsStream implements RuleAction , IPars
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -29,9 +30,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
public class C99NoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new C99NoCastExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -136,7 +137,7 @@ public class C99NoCastExpressionParser extends PrsStream implements RuleAction ,
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -29,9 +30,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
public class C99Parser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new C99Parserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -136,7 +137,7 @@ public class C99Parser extends PrsStream implements RuleAction , IParserActionTo
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -29,9 +30,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.c99.C99BuildASTParserAction;
public class C99SizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new C99SizeofExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -136,7 +137,7 @@ public class C99SizeofExpressionParser extends PrsStream implements RuleAction ,
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory;
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -30,9 +31,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
public class CPPExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new CPPExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -137,7 +138,7 @@ public class CPPExpressionParser extends PrsStream implements RuleAction , IPars
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory;
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -30,9 +31,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
public class CPPNoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new CPPNoCastExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -137,7 +138,7 @@ public class CPPNoCastExpressionParser extends PrsStream implements RuleAction ,
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory;
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -30,9 +31,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
public class CPPNoFunctionDeclaratorParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new CPPNoFunctionDeclaratorParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -137,7 +138,7 @@ public class CPPNoFunctionDeclaratorParser extends PrsStream implements RuleActi
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory;
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -30,9 +31,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
public class CPPParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new CPPParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -137,7 +138,7 @@ public class CPPParser extends PrsStream implements RuleAction , IParserActionTo
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory;
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -30,9 +31,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
public class CPPSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new CPPSizeofExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -137,7 +138,7 @@ public class CPPSizeofExpressionParser extends PrsStream implements RuleAction ,
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPASTNodeFactory;
import org.eclipse.cdt.core.dom.lrparser.action.cpp.CPPBuildASTParserAction;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -30,9 +31,9 @@ import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
public class CPPTemplateTypeParameterParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new CPPTemplateTypeParameterParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -137,7 +138,7 @@ public class CPPTemplateTypeParameterParser extends PrsStream implements RuleAct
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.parser.upc.UPCParserAction;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
./
$End

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import

View file

@ -11,7 +11,7 @@
%options la=2
%options package=org.eclipse.cdt.internal.core.dom.parser.upc
%options template=btParserTemplateD.g
%options template=FixedBtParserTemplateD.g
$Import

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -31,13 +32,14 @@ import org.eclipse.cdt.core.dom.parser.upc.UPCParserAction;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
public class UPCExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new UPCExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -142,7 +144,7 @@ public class UPCExpressionParser extends PrsStream implements RuleAction , IPars
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -31,13 +32,14 @@ import org.eclipse.cdt.core.dom.parser.upc.UPCParserAction;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
public class UPCNoCastExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new UPCNoCastExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -142,7 +144,7 @@ public class UPCNoCastExpressionParser extends PrsStream implements RuleAction ,
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -31,13 +32,14 @@ import org.eclipse.cdt.core.dom.parser.upc.UPCParserAction;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
public class UPCParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new UPCParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -142,7 +144,7 @@ public class UPCParser extends PrsStream implements RuleAction , IParserActionTo
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{

View file

@ -19,6 +19,7 @@ import java.util.*;
import org.eclipse.cdt.core.dom.ast.*;
import org.eclipse.cdt.core.dom.lrparser.IParser;
import org.eclipse.cdt.core.dom.lrparser.IParserActionTokenProvider;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
import org.eclipse.cdt.core.dom.lrparser.action.ITokenMap;
import org.eclipse.cdt.core.dom.lrparser.action.TokenMap;
@ -31,13 +32,14 @@ import org.eclipse.cdt.core.dom.parser.upc.UPCParserAction;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTKeywordExpression;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTSynchronizationStatement;
import org.eclipse.cdt.core.dom.upc.ast.IUPCASTUnarySizeofExpression;
import org.eclipse.cdt.core.dom.lrparser.lpgextensions.FixedBacktrackingParser;
public class UPCSizeofExpressionParser extends PrsStream implements RuleAction , IParserActionTokenProvider, IParser
{
private static ParseTable prs = new UPCSizeofExpressionParserprs();
private BacktrackingParser btParser;
private FixedBacktrackingParser btParser;
public BacktrackingParser getParser() { return btParser; }
public FixedBacktrackingParser getParser() { return btParser; }
private void setResult(Object object) { btParser.setSym1(object); }
public Object getRhsSym(int i) { return btParser.getSym(i); }
@ -142,7 +144,7 @@ public class UPCSizeofExpressionParser extends PrsStream implements RuleAction ,
{
try
{
btParser = new BacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
btParser = new FixedBacktrackingParser(monitor, (TokenStream) this, prs, (RuleAction) this);
}
catch (NotBacktrackParseTableException e)
{