1 package antlr; 2 3 9 10 import java.util.Hashtable ; 11 import java.util.Enumeration ; 12 import java.io.IOException ; 13 14 import antlr.collections.impl.BitSet; 15 import antlr.collections.impl.Vector; 16 17 18 class LexerGrammar extends Grammar { 19 protected BitSet charVocabulary; 21 protected boolean testLiterals = true; 23 protected boolean caseSensitiveLiterals = true; 25 26 protected boolean caseSensitive = true; 27 28 protected boolean filterMode = false; 29 30 34 protected String filterRule = null; 35 36 LexerGrammar(String className_, Tool tool_, String superClass) { 37 super(className_, tool_, superClass); 38 charVocabulary = new BitSet(); 39 40 defaultErrorHandler = false; 42 } 43 44 45 public void generate() throws IOException { 46 generator.gen(this); 47 } 48 49 public String getSuperClass() { 50 if (debuggingOutput) 52 return "debug.DebuggingCharScanner"; 53 return "CharScanner"; 54 } 55 56 public boolean getTestLiterals() { 58 return testLiterals; 59 } 60 61 66 public void processArguments(String [] args) { 67 for (int i = 0; i < args.length; i++) { 68 if (args[i].equals("-trace")) { 69 traceRules = true; 70 antlrTool.setArgOK(i); 71 } 72 else if (args[i].equals("-traceLexer")) { 73 traceRules = true; 74 antlrTool.setArgOK(i); 75 } 76 else if (args[i].equals("-debug")) { 77 debuggingOutput = true; 78 antlrTool.setArgOK(i); 79 } 80 } 81 } 82 83 84 public void setCharVocabulary(BitSet b) { 85 charVocabulary = b; 86 } 87 88 89 public boolean setOption(String key, Token value) { 90 String s = value.getText(); 91 if (key.equals("buildAST")) { 92 antlrTool.warning("buildAST option is not valid for lexer", getFilename(), value.getLine(), value.getColumn()); 93 return true; 94 } 95 if (key.equals("testLiterals")) { 96 if (s.equals("true")) { 97 testLiterals = true; 98 } 99 else if (s.equals("false")) { 100 testLiterals = false; 101 } 102 else { 103 antlrTool.warning("testLiterals option must be true or false", getFilename(), value.getLine(), value.getColumn()); 104 } 105 return true; 106 } 107 if (key.equals("interactive")) { 108 if (s.equals("true")) { 109 interactive = true; 110 } 111 else if (s.equals("false")) { 112 interactive = false; 113 } 114 else { 115 antlrTool.error("interactive option must be true or false", getFilename(), value.getLine(), value.getColumn()); 116 } 117 return true; 118 } 119 if (key.equals("caseSensitive")) { 120 if (s.equals("true")) { 121 caseSensitive = true; 122 } 123 else if (s.equals("false")) { 124 caseSensitive = false; 125 } 126 else { 127 antlrTool.warning("caseSensitive option must be true or false", getFilename(), value.getLine(), value.getColumn()); 128 } 129 return true; 130 } 131 if (key.equals("caseSensitiveLiterals")) { 132 if (s.equals("true")) { 133 caseSensitiveLiterals = true; 134 } 135 else if (s.equals("false")) { 136 caseSensitiveLiterals = false; 137 } 138 else { 139 antlrTool.warning("caseSensitiveLiterals option must be true or false", getFilename(), value.getLine(), value.getColumn()); 140 } 141 return true; 142 } 143 if (key.equals("filter")) { 144 if (s.equals("true")) { 145 filterMode = true; 146 } 147 else if (s.equals("false")) { 148 filterMode = false; 149 } 150 else if (value.getType() == ANTLRTokenTypes.TOKEN_REF) { 151 filterMode = true; 152 filterRule = s; 153 } 154 else { 155 antlrTool.warning("filter option must be true, false, or a lexer rule name", getFilename(), value.getLine(), value.getColumn()); 156 } 157 return true; 158 } 159 if (key.equals("longestPossible")) { 160 antlrTool.warning("longestPossible option has been deprecated; ignoring it...", getFilename(), value.getLine(), value.getColumn()); 161 return true; 162 } 163 if (super.setOption(key, value)) { 164 return true; 165 } 166 antlrTool.error("Invalid option: " + key, getFilename(), value.getLine(), value.getColumn()); 167 return false; 168 } 169 } 170 | Popular Tags |