From dff466be66c851b4f237e49bb052bf7392e8e2eb Mon Sep 17 00:00:00 2001 From: parrt Date: Sat, 31 Dec 2011 17:26:48 -0800 Subject: [PATCH] literal rules like A:'a' not seen in modes; weren't in .tokens files [git-p4: depot-paths = "//depot/code/antlr4/main/": change = 9766] --- tool/src/org/antlr/v4/tool/Grammar.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/tool/src/org/antlr/v4/tool/Grammar.java b/tool/src/org/antlr/v4/tool/Grammar.java index 4b951cc6c..110755a9e 100644 --- a/tool/src/org/antlr/v4/tool/Grammar.java +++ b/tool/src/org/antlr/v4/tool/Grammar.java @@ -733,17 +733,14 @@ public class Grammar implements AttributeResolver { } public static Map getStringLiteralAliasesFromLexerRules(GrammarRootAST ast) { - GrammarAST combinedRulesRoot = - (GrammarAST)ast.getFirstChildWithType(ANTLRParser.RULES); - if ( combinedRulesRoot==null ) return null; - - List ruleNodes = combinedRulesRoot.getChildren(); - if ( ruleNodes==null || ruleNodes.size()==0 ) return null; - GrammarASTAdaptor adaptor = new GrammarASTAdaptor(ruleNodes.get(0).token.getInputStream()); + GrammarASTAdaptor adaptor = new GrammarASTAdaptor(ast.token.getInputStream()); TreeWizard wiz = new TreeWizard(adaptor,ANTLRParser.tokenNames); Map lexerRuleToStringLiteral = new HashMap(); - for (GrammarASTWithOptions r : ruleNodes) { + List ruleNodes = ast.getNodesWithType(ANTLRParser.RULE); + if ( ruleNodes==null || ruleNodes.size()==0 ) return null; + + for (GrammarAST r : ruleNodes) { //tool.log("grammar", r.toStringTree()); Tree name = r.getChild(0); if ( name.getType()==ANTLRParser.TOKEN_REF ) { @@ -756,10 +753,11 @@ public class Grammar implements AttributeResolver { lexerRuleToStringLiteral.put(litNode.getText(), nameNode.getText()); continue; } + // TODO: allow doc comment in there nodes = new HashMap(); - // try with doc comment in there + // try with action in there isLitRule = - wiz.parse(r, "(RULE %name:TOKEN_REF DOC_COMMENT (BLOCK (ALT %lit:STRING_LITERAL)))", nodes); + wiz.parse(r, "(RULE %name:TOKEN_REF (BLOCK (ALT %lit:STRING_LITERAL ACTION)))", nodes); if ( isLitRule ) { GrammarAST litNode = (GrammarAST)nodes.get("lit"); GrammarAST nameNode = (GrammarAST)nodes.get("name");