1 package org.antlr.works.syntax.element; 2 3 import org.antlr.works.ate.syntax.misc.ATEToken; 4 import org.antlr.works.syntax.GrammarSyntaxParser; 5 6 import java.util.ArrayList ; 7 import java.util.List ; 8 9 39 40 55 public class ElementBlock extends ElementScopable { 56 57 public String name; 58 public ATEToken start; 59 public ATEToken end; 60 61 public boolean isTokenBlock = false; 62 public boolean isOptionsBlock = false; 63 64 public List <ATEToken> internalTokens; 65 private List <ATEToken> declaredTokens; 66 67 private String tokenVocab; 68 69 public ElementBlock(String name, ATEToken start) { 70 this.name = name; 71 this.start = start; 72 } 73 74 77 public void parse() { 78 if(name.equals(GrammarSyntaxParser.OPTIONS_BLOCK_NAME)) { 79 parseForTokenVocab(); 81 isOptionsBlock = true; 82 } else if(name.equals(GrammarSyntaxParser.TOKENS_BLOCK_NAME)) { 83 parseForTokens(); 85 isTokenBlock = true; 86 } 87 } 88 89 92 private void parseForTokenVocab() { 93 for(int index=0; index<internalTokens.size(); index++) { 94 ATEToken t = internalTokens.get(index); 95 if(t.getAttribute().equals("tokenVocab") && index+2<internalTokens.size()) { 96 t = internalTokens.get(index+2); 97 tokenVocab = t.getAttribute(); 98 } 100 } 101 } 102 103 111 private void parseForTokens() { 112 declaredTokens = new ArrayList <ATEToken>(); 113 for(int index=0; index<internalTokens.size(); index++) { 114 ATEToken t = internalTokens.get(index); 115 if(t.getAttribute().equals("=")) { 116 declaredTokens.add(internalTokens.get(index-1)); 117 index += 2; 119 } else if(t.getAttribute().equals(";")) { 120 declaredTokens.add(internalTokens.get(index-1)); 121 index++; 123 124 } 125 } 126 } 128 129 public String getTokenVocab() { 130 return tokenVocab; 131 } 132 133 public List <ATEToken> getDeclaredTokens() { 134 return declaredTokens; 135 } 136 137 public List <String > getDeclaredTokensAsString() { 138 List <String > names = new ArrayList <String >(); 139 for(int t=0; t<declaredTokens.size(); t++) { 140 names.add(declaredTokens.get(t).getAttribute()); 141 } 142 return names; 143 } 144 145 } 146 | Popular Tags |