@Override public ActionAST dupNode() { return new ActionAST(this); }
&& ast.atnState.transition(0) instanceof AbstractPredicateTransition; GrammarAST failNode = ast.getOptionAST("fail"); CodeGenerator gen = factory.getGenerator(); predicate = ast.getText(); if (predicate.startsWith("{") && predicate.endsWith("}?")) { predicate = predicate.substring(1, predicate.length() - 2);
@Override public void ruleCatch(GrammarAST arg, ActionAST action) { GrammarAST catchme = (GrammarAST)action.getParent(); currentRule.exceptions.add(catchme); action.resolver = currentRule; }
String actionText = action.getText(); int[] lines = new int[actionText.length()]; int[] charPositionInLines = new int[actionText.length()]; int declLine = lines[declOffset + idStart]; int line = action.getToken().getLine() + declLine; int charPositionInLine = charPositionInLines[declOffset + idStart]; if (declLine == 0) { charPositionInLine += action.getToken().getCharPositionInLine() + 1; int offset = ((CommonToken) action.getToken()).getStartIndex(); attr.token = new CommonToken(action.getToken().getInputStream(), ANTLRParser.ID, BaseRecognizer.DEFAULT_TOKEN_CHANNEL, offset + declOffset + idStart + 1, offset + declOffset + idStop); attr.token.setLine(line); attr.token.setCharPositionInLine(charPositionInLine);
public String getPredicateDisplayString(SemanticContext.Predicate pred) { if ( indexToPredMap==null ) { indexToPredMap = getIndexToPredicateMap(); } ActionAST actionAST = indexToPredMap.get(pred.predIndex); return actionAST.getText(); }
public static List<ActionChunk> translateActionChunk(OutputModelFactory factory, RuleFunction rf, String action, ActionAST node) { Token tokenWithinAction = node.token; ActionTranslator translator = new ActionTranslator(factory, node); translator.rf = rf; factory.getGrammar().tool.log("action-translator", "translate " + action); String altLabel = node.getAltLabel(); if ( rf!=null ) { translator.nodeContext = rf.ruleCtx; if ( altLabel!=null ) translator.nodeContext = rf.altLabelCtxs.get(altLabel); } ANTLRStringStream in = new ANTLRStringStream(action); in.setLine(tokenWithinAction.getLine()); in.setCharPositionInLine(tokenWithinAction.getCharPositionInLine()); ActionSplitter trigger = new ActionSplitter(in, translator); // forces eval, triggers listener methods trigger.getActionTokens(); return translator.chunks; }
public void buildLexerRuleActions(Lexer lexer, final Rule r) { if (r.actions.isEmpty()) { return; } CodeGenerator gen = delegate.getGenerator(); Grammar g = delegate.getGrammar(); String ctxType = delegate.getTarget().getRuleFunctionContextStructName(r); RuleActionFunction raf = lexer.actionFuncs.get(r); if ( raf==null ) { raf = new RuleActionFunction(delegate, r, ctxType); } for (ActionAST a : r.actions) { if ( a instanceof PredAST ) { PredAST p = (PredAST)a; RuleSempredFunction rsf = lexer.sempredFuncs.get(r); if ( rsf==null ) { rsf = new RuleSempredFunction(delegate, r, ctxType); lexer.sempredFuncs.put(r, rsf); } rsf.actions.put(g.sempreds.get(p), new Action(delegate, p)); } else if ( a.getType()== ANTLRParser.ACTION ) { raf.actions.put(g.lexerActions.get(a), new Action(delegate, a)); } } if (!raf.actions.isEmpty() && !lexer.actionFuncs.containsKey(r)) { // only add to lexer if the function actually contains actions lexer.actionFuncs.put(r, raf); } }
String actionText = action.getText(); int[] lines = new int[actionText.length()]; int[] charPositionInLines = new int[actionText.length()]; int declLine = lines[declOffset + start]; int line = action.getToken().getLine() + declLine; int charPositionInLine = charPositionInLines[declOffset + start]; if (declLine == 0) { charPositionInLine += action.getToken().getCharPositionInLine() + 1; int offset = ((CommonToken)action.getToken()).getStartIndex(); attr.token = new CommonToken(action.getToken().getInputStream(), ANTLRParser.ID, BaseRecognizer.DEFAULT_TOKEN_CHANNEL, offset + declOffset + start + 1, offset + declOffset + stop); attr.token.setLine(line); attr.token.setCharPositionInLine(charPositionInLine);
public String getPredicateDisplayString(SemanticContext.Predicate pred) { if ( indexToPredMap==null ) { indexToPredMap = getIndexToPredicateMap(); } ActionAST actionAST = indexToPredMap.get(pred.predIndex); return actionAST.getText(); }
public static List<ActionChunk> translateActionChunk(OutputModelFactory factory, RuleFunction rf, String action, ActionAST node) { Token tokenWithinAction = node.token; ActionTranslator translator = new ActionTranslator(factory, node); translator.rf = rf; factory.getGrammar().tool.log("action-translator", "translate " + action); String altLabel = node.getAltLabel(); if ( rf!=null ) { translator.nodeContext = rf.ruleCtx; if ( altLabel!=null ) translator.nodeContext = rf.altLabelCtxs.get(altLabel); } ANTLRStringStream in = new ANTLRStringStream(action); in.setLine(tokenWithinAction.getLine()); in.setCharPositionInLine(tokenWithinAction.getCharPositionInLine()); ActionSplitter trigger = new ActionSplitter(in, translator); // forces eval, triggers listener methods trigger.getActionTokens(); return translator.chunks; }
public void buildLexerRuleActions(Lexer lexer, final Rule r) { if (r.actions.isEmpty()) { return; } CodeGenerator gen = delegate.getGenerator(); Grammar g = delegate.getGrammar(); String ctxType = gen.getTarget().getRuleFunctionContextStructName(r); RuleActionFunction raf = lexer.actionFuncs.get(r); if ( raf==null ) { raf = new RuleActionFunction(delegate, r, ctxType); } for (ActionAST a : r.actions) { if ( a instanceof PredAST ) { PredAST p = (PredAST)a; RuleSempredFunction rsf = lexer.sempredFuncs.get(r); if ( rsf==null ) { rsf = new RuleSempredFunction(delegate, r, ctxType); lexer.sempredFuncs.put(r, rsf); } rsf.actions.put(g.sempreds.get(p), new Action(delegate, p)); } else if ( a.getType()== ANTLRParser.ACTION ) { raf.actions.put(g.lexerActions.get(a), new Action(delegate, a)); } } if (!raf.actions.isEmpty() && !lexer.actionFuncs.containsKey(r)) { // only add to lexer if the function actually contains actions lexer.actionFuncs.put(r, raf); } }
@Override public ActionAST dupNode() { return new ActionAST(this); }
&& ast.atnState.transition(0) instanceof AbstractPredicateTransition; GrammarAST failNode = ast.getOptionAST("fail"); CodeGenerator gen = factory.getGenerator(); predicate = ast.getText(); if (predicate.startsWith("{") && predicate.endsWith("}?")) { predicate = predicate.substring(1, predicate.length() - 2);
String actionText = action.getText(); int[] lines = new int[actionText.length()]; int[] charPositionInLines = new int[actionText.length()]; int declLine = lines[declOffset + idStart]; int line = action.getToken().getLine() + declLine; int charPositionInLine = charPositionInLines[declOffset + idStart]; if (declLine == 0) { charPositionInLine += action.getToken().getCharPositionInLine() + 1; int offset = ((CommonToken) action.getToken()).getStartIndex(); attr.token = new CommonToken(action.getToken().getInputStream(), ANTLRParser.ID, BaseRecognizer.DEFAULT_TOKEN_CHANNEL, offset + declOffset + idStart + 1, offset + declOffset + idStop); attr.token.setLine(line); attr.token.setCharPositionInLine(charPositionInLine);
public String getPredicateDisplayString(SemanticContext.Predicate pred) { if ( indexToPredMap==null ) { indexToPredMap = getIndexToPredicateMap(); } ActionAST actionAST = indexToPredMap.get(pred.predIndex); return actionAST.getText(); }
@Override public void ruleCatch(GrammarAST arg, ActionAST action) { GrammarAST catchme = (GrammarAST)action.getParent(); currentRule.exceptions.add(catchme); action.resolver = currentRule; }
public static List<ActionChunk> translateActionChunk(OutputModelFactory factory, RuleFunction rf, String action, ActionAST node) { Token tokenWithinAction = node.token; ActionTranslator translator = new ActionTranslator(factory, node); translator.rf = rf; factory.getGrammar().tool.log("action-translator", "translate " + action); String altLabel = node.getAltLabel(); if ( rf!=null ) translator.nodeContext = rf.ruleCtx; if ( altLabel!=null ) translator.nodeContext = rf.altLabelCtxs.get(altLabel); ANTLRStringStream in = new ANTLRStringStream(action); in.setLine(tokenWithinAction.getLine()); in.setCharPositionInLine(tokenWithinAction.getCharPositionInLine()); ActionSplitter trigger = new ActionSplitter(in, translator); // forces eval, triggers listener methods trigger.getActionTokens(); return translator.chunks; }
public void buildLexerRuleActions(Lexer lexer, final Rule r) { if (r.actions.isEmpty()) { return; } CodeGenerator gen = delegate.getGenerator(); Grammar g = delegate.getGrammar(); String ctxType = gen.getTarget().getRuleFunctionContextStructName(r); RuleActionFunction raf = lexer.actionFuncs.get(r); if ( raf==null ) { raf = new RuleActionFunction(delegate, r, ctxType); } for (ActionAST a : r.actions) { if ( a instanceof PredAST ) { PredAST p = (PredAST)a; RuleSempredFunction rsf = lexer.sempredFuncs.get(r); if ( rsf==null ) { rsf = new RuleSempredFunction(delegate, r, ctxType); lexer.sempredFuncs.put(r, rsf); } rsf.actions.put(g.sempreds.get(p), new Action(delegate, p)); } else if ( a.getType()== ANTLRParser.ACTION ) { raf.actions.put(g.lexerActions.get(a), new Action(delegate, a)); } } if (!raf.actions.isEmpty() && !lexer.actionFuncs.containsKey(r)) { // only add to lexer if the function actually contains actions lexer.actionFuncs.put(r, raf); } }
@Override public ActionAST dupNode() { return new ActionAST(this); }
&& ast.atnState.transition(0) instanceof AbstractPredicateTransition; GrammarAST failNode = ast.getOptionAST("fail"); CodeGenerator gen = factory.getGenerator(); predicate = ast.getText(); if (predicate.startsWith("{") && predicate.endsWith("}?")) { predicate = predicate.substring(1, predicate.length() - 2);