Make an index for fast lookup from Token to tree leaf
(ParserRuleContext root)
| 911 | |
| 912 | /** Make an index for fast lookup from Token to tree leaf */ |
| 913 | public static Map<Token, TerminalNode> indexTree(ParserRuleContext root) { |
| 914 | Map<Token, TerminalNode> tokenToNodeMap = new HashMap<>(); |
| 915 | ParseTreeWalker.DEFAULT.walk( |
| 916 | new ParseTreeListener() { |
| 917 | @Override |
| 918 | public void visitTerminal(TerminalNode node) { |
| 919 | Token curToken = node.getSymbol(); |
| 920 | tokenToNodeMap.put(curToken, node); |
| 921 | } |
| 922 | |
| 923 | @Override |
| 924 | public void visitErrorNode(ErrorNode node) { |
| 925 | } |
| 926 | |
| 927 | @Override |
| 928 | public void enterEveryRule(ParserRuleContext ctx) { |
| 929 | } |
| 930 | |
| 931 | @Override |
| 932 | public void exitEveryRule(ParserRuleContext ctx) { |
| 933 | } |
| 934 | }, |
| 935 | root |
| 936 | ); |
| 937 | return tokenToNodeMap; |
| 938 | } |
| 939 | |
| 940 | public static List<Token> getRealTokens(CommonTokenStream tokens) { |
| 941 | List<Token> real = new ArrayList<>(); |