@Override public void visitErrorNode(ErrorNode ctx) { String nodeText = BatfishCombinedParser.escape(ctx.getText()); // _sb.append("\n"); _ptSentences.getSentences().add(""); for (int i = 0; i < _indent; i++) { _ptSentences.appendToLastSentence(" "); } int tokenType = ctx.getSymbol().getType(); String tokenName; if (tokenType == Lexer.EOF) { tokenName = "EOF"; _ptSentences.appendToLastSentence(tokenName + ":" + nodeText); } else if (tokenType == BatfishLexer.UNRECOGNIZED_LINE_TOKEN) { _ptSentences.appendToLastSentence("<UnrecognizedLine>:'" + nodeText + "'"); } else { tokenName = _vocabulary.getSymbolicName(tokenType); _ptSentences.appendToLastSentence("<ErrorNode>:" + tokenName + ":'" + nodeText + "'"); } }
public ParseEnvironmentBgpTableJob( Settings settings, String fileText, String hostname, Path file, Warnings warnings, SortedMap<BgpTableFormat, BgpTablePlugin> bgpTablePlugins) { super(settings); _bgpTablePlugins = bgpTablePlugins; _fileText = fileText; _file = file; _hostname = hostname; _ptSentences = new ParseTreeSentences(); _warnings = warnings; }
@Override public String prettyPrint() { StringBuilder sb = new StringBuilder(); sb.append("Parse trees of vendor configurations\n"); for (String name : _parseTrees.keySet()) { sb.append("\n " + name + " [Parse tree]\n"); for (String sentence : _parseTrees.get(name).getSentences()) { sb.append(" " + sentence + "\n"); } } return sb.toString(); }
answerElement.getWarnings().put(hostname, _warnings); if (!_parseTree.isEmpty()) { answerElement.getParseTrees().put(hostname, _parseTree);
@Override public void exitEveryRule(ParserRuleContext ctx) { _indent--; _ptSentences.appendToLastSentence(")"); }
@Override public String prettyPrint() { StringBuilder retString = new StringBuilder("Results of parsing vendor configurations\n"); for (String name : _warnings.keySet()) { retString.append("\n " + name + "[Parser warnings]\n"); for (Warning warning : _warnings.get(name).getRedFlagWarnings()) { retString.append(" RedFlag " + warning.getTag() + " : " + warning.getText() + "\n"); } for (Warning warning : _warnings.get(name).getUnimplementedWarnings()) { retString.append( " Unimplemented " + warning.getTag() + " : " + warning.getText() + "\n"); } for (Warning warning : _warnings.get(name).getPedanticWarnings()) { retString.append(" Pedantic " + warning.getTag() + " : " + warning.getText() + "\n"); } } for (String name : _errors.keySet()) { retString.append("\n " + name + "[Parser errors]\n"); for (String line : _errors.get(name).getLineMap()) { retString.append(" " + line + "\n"); } } for (String name : _parseTrees.keySet()) { retString.append("\n " + name + " [Parse trees]\n"); for (String sentence : _parseTrees.get(name).getSentences()) { retString.append(" ParseTreeSentence : " + sentence + "\n"); } } return retString.toString(); }
answerElement.getWarnings().put(hostname, _warnings); if (!_parseTree.isEmpty()) { answerElement.getParseTrees().put(hostname, _parseTree);
@Override public void enterEveryRule(ParserRuleContext ctx) { if (ctx != _ctx) { _ptSentences.getSentences().add(""); } for (int i = 0; i < _indent; i++) { _ptSentences.appendToLastSentence(" "); } String ruleName = _ruleNames.get(ctx.getRuleIndex()); if (ctx.getParent() != null) { for (Field f : ctx.getParent().getClass().getFields()) { try { if (!f.getName().equals(ruleName) && f.get(ctx.getParent()) == ctx) { _ptSentences.appendToLastSentence(f.getName() + " = "); } } catch (Throwable t) { // Ignore the error and continue. } } } _ptSentences.appendToLastSentence("(" + ruleName); _indent++; }
public static String print( ParserRuleContext ctx, BatfishCombinedParser<?, ?> combinedParser, boolean printLineNumbers) { int maxStringLength = combinedParser.getSettings().getMaxParseTreePrintLength(); List<String> strings = getParseTreeSentences(ctx, combinedParser, printLineNumbers).getSentences(); return printWithCharacterLimit(strings, maxStringLength); }
public ParseVendorConfigurationJob( Settings settings, String fileText, String filename, Warnings warnings, ConfigurationFormat configurationFormat, Multimap<String, String> duplicateHostnames, @Nullable SpanContext spanContext) { super(settings); _fileText = fileText; _filename = filename; _ptSentences = new ParseTreeSentences(); _warnings = warnings; _format = configurationFormat; _duplicateHostnames = duplicateHostnames; _spanContext = spanContext; }
answerElement.getWarnings().put(hostname, _warnings); if (!_parseTree.isEmpty()) { answerElement.getParseTrees().put(hostname, _parseTree);
@Override public void visitTerminal(TerminalNode ctx) { String nodeText = BatfishCombinedParser.escape(ctx.getText()); _ptSentences.getSentences().add(""); for (int i = 0; i < _indent; i++) { _ptSentences.appendToLastSentence(" "); _ptSentences.appendToLastSentence(f.getName() + " = "); _ptSentences.appendToLastSentence(tokenName + ":" + nodeText); } else { _ptSentences.appendToLastSentence(tokenName + ":'" + nodeText + "'"); _ptSentences.appendToLastSentence(" <== mode:" + mode); _ptSentences.appendToLastSentence(String.format(" line:%s", _combinedParser.getLine(t)));
@Test public void testGetParseTreeSentencesLineNumbers() { String configText = CommonUtil.readResource("org/batfish/grammar/line_numbers"); GrammarSettings settings = new MockGrammarSettings(false, 0, 0, 1000, true, true, true, true); RecoveryCombinedParser cp = new RecoveryCombinedParser(configText, settings); ParserRuleContext tree = cp.parse(); ParseTreeSentences ptSentencesLineNums = ParseTreePrettyPrinter.getParseTreeSentences(tree, cp, true); /* Confirm printed parse tree includes line numbers when that option is set */ assertThat(ptSentencesLineNums.getSentences().get(3), containsString("SIMPLE:'simple' line:1")); assertThat(ptSentencesLineNums.getSentences().get(9), containsString("BLOCK:'block' line:2")); assertThat(ptSentencesLineNums.getSentences().get(12), containsString("INNER:'inner' line:3")); assertThat( ptSentencesLineNums.getSentences().get(14), containsString("SIMPLE:'simple' line:3)")); assertThat(ptSentencesLineNums.getSentences().get(16), containsString("EOF:<EOF> line:5)")); }
public ParseEnvironmentRoutingTableJob( Settings settings, String fileText, Path file, Warnings warnings, IBatfish batfish) { super(settings); _batfish = batfish; _fileText = fileText; _file = file; _hostname = file.getFileName().toString(); _ptSentences = new ParseTreeSentences(); _warnings = warnings; }
@Test public void testGetParseTreeSentencesMappedLineNumbers() { String configText = CommonUtil.readResource("org/batfish/grammar/line_numbers"); GrammarSettings settings = new MockGrammarSettings(false, 0, 0, 1000, true, true, true, true); FlattenerLineMap lineMap = new FlattenerLineMap(); /* Map words on each line to different original lines */ /* (first) simple */ lineMap.setOriginalLine(1, 0, 5); /* block */ lineMap.setOriginalLine(2, 0, 6); /* inner */ lineMap.setOriginalLine(3, 2, 7); /* (last) simple */ lineMap.setOriginalLine(3, 7, 8); /* EOF */ lineMap.setOriginalLine(5, 0, 9); RecoveryCombinedParser cp = new RecoveryCombinedParser(configText, settings, lineMap); ParserRuleContext tree = cp.parse(); ParseTreeSentences ptSentencesLineNums = ParseTreePrettyPrinter.getParseTreeSentences(tree, cp, true); /* Confirm printed parse tree includes original line numbers */ assertThat(ptSentencesLineNums.getSentences().get(3), containsString("SIMPLE:'simple' line:5")); assertThat(ptSentencesLineNums.getSentences().get(9), containsString("BLOCK:'block' line:6")); assertThat(ptSentencesLineNums.getSentences().get(12), containsString("INNER:'inner' line:7")); assertThat( ptSentencesLineNums.getSentences().get(14), containsString("SIMPLE:'simple' line:8)")); assertThat(ptSentencesLineNums.getSentences().get(16), containsString("EOF:<EOF> line:9)")); } }
private ParseTreePrettyPrinter( ParserRuleContext ctx, BatfishCombinedParser<?, ?> combinedParser, boolean printLineNumbers) { Parser grammar = combinedParser.getParser(); List<String> ruleNames = Arrays.asList(grammar.getRuleNames()); _vocabulary = grammar.getVocabulary(); _combinedParser = combinedParser; _ruleNames = ruleNames; _ctx = ctx; _ptSentences = new ParseTreeSentences(); _printLineNumbers = printLineNumbers; _indent = 0; }