2 /* Generated By:JavaCC: Do not edit this line. UtilParser.java */
3 package edu.uci.eecs.utilParser;
4 import edu.uci.eecs.specExtraction.FunctionHeader;
5 import edu.uci.eecs.specExtraction.QualifiedName;
6 import edu.uci.eecs.specExtraction.VariableDeclaration;
7 //import edu.uci.eecs.specExtraction.WrongAnnotationException;
9 import java.io.FileInputStream;
10 import java.io.FileNotFoundException;
11 import java.io.InputStream;
12 import java.io.ByteArrayInputStream;
14 import java.util.ArrayList;
17 public class UtilParser implements UtilParserConstants {
18 public static void main(String[] argvs)
19 throws ParseException, TokenMgrError {
21 File f = new File("./grammer/spec1.txt");
22 FileInputStream fis = new FileInputStream(f);
23 UtilParser parser = new UtilParser(fis);
26 System.out.println("Parsing finished!");
27 } catch (FileNotFoundException e) {
32 public static ArrayList<VariableDeclaration> getTemplateArg(String line)
33 throws ParseException {
34 InputStream input = new ByteArrayInputStream(line.getBytes());
35 UtilParser parser = new UtilParser(input);
36 return parser.TemplateParamList();
39 public static FunctionHeader parseFuncHeader(String line)
40 throws ParseException {
41 InputStream input = new ByteArrayInputStream(line.getBytes());
42 UtilParser parser = new UtilParser(input);
43 return parser.FuncDecl();
46 public static VariableDeclaration parseDeclaration(String line)
47 throws ParseException {
48 InputStream input = new ByteArrayInputStream(line.getBytes());
49 UtilParser parser = new UtilParser(input);
50 return parser.Declaration();
53 public static String stringArray2String(ArrayList<String> content) {
54 StringBuilder sb = new StringBuilder();
55 if (content.size() == 1)
56 return content.get(0);
57 for (int i = 0; i < content.size(); i++) {
58 sb.append(content.get(i) + "\u005cn");
63 final public String Type() throws ParseException {String type;
67 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
69 jj_consume_token(CONST);
77 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
81 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
83 str = jj_consume_token(STRUCT).image;
87 str = jj_consume_token(CLASS).image;
91 str = jj_consume_token(UNSIGNED).image;
97 throw new ParseException();
99 type = type.equals("") ? type + str : type + " " + str;
106 name = ParseQualifiedName();
107 if (!type.equals(""))
108 type = type + " " + name.fullName;
110 type = name.fullName;
113 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
124 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
126 str = jj_consume_token(CONST).image;
127 if (!type.equals(""))
128 type = type + " " + str;
134 str = jj_consume_token(STAR).image;
135 if (!type.equals(""))
136 type = type + " " + str;
142 str = jj_consume_token(AND).image;
143 if (!type.equals(""))
144 type = type + " " + str;
151 jj_consume_token(-1);
152 throw new ParseException();
155 {if ("" != null) return type;}
156 throw new Error("Missing return statement in function");
159 final public void Test() throws ParseException {String str;
164 System.out.println(str);
168 System.out.println(func);
171 final public String ParameterizedName() throws ParseException {String res = "";
173 str = jj_consume_token(IDENTIFIER).image;
175 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
177 jj_consume_token(LESS_THAN);
179 res = res + "<" + str;
182 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
191 jj_consume_token(COMMA);
193 res = res + ", " + str;
195 jj_consume_token(GREATER_THAN);
203 {if ("" != null) return res;}
204 throw new Error("Missing return statement in function");
207 final public FunctionHeader FuncDecl() throws ParseException {String ret;
208 QualifiedName funcName;
209 ArrayList<VariableDeclaration> args;
212 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
222 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
224 jj_consume_token(STATIC);
228 jj_consume_token(INLINE);
233 jj_consume_token(-1);
234 throw new ParseException();
238 funcName = ParseQualifiedName();
239 args = FormalParamList();
240 FunctionHeader res = new FunctionHeader(ret, funcName, args);
241 //System.out.println(res);
242 {if ("" != null) return res;}
243 throw new Error("Missing return statement in function");
246 final public QualifiedName ParseQualifiedName() throws ParseException {String qualifiedName, str;
248 str = ParameterizedName();
249 qualifiedName = qualifiedName + str;
252 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
261 jj_consume_token(DOUBLECOLON);
262 str = ParameterizedName();
263 qualifiedName = qualifiedName +
266 QualifiedName res = new QualifiedName(qualifiedName);
267 //System.out.println(res);
268 {if ("" != null) return res;}
269 throw new Error("Missing return statement in function");
272 final public ArrayList<VariableDeclaration> TemplateParamList() throws ParseException {ArrayList<VariableDeclaration> params;
275 params = new ArrayList<VariableDeclaration>();
276 jj_consume_token(TEMPLATE);
277 jj_consume_token(LESS_THAN);
278 type = jj_consume_token(IDENTIFIER).image;
279 name = jj_consume_token(IDENTIFIER).image;
280 params.add(new VariableDeclaration(type, name));
283 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
292 jj_consume_token(COMMA);
293 type = jj_consume_token(IDENTIFIER).image;
294 name = jj_consume_token(IDENTIFIER).image;
295 params.add(new VariableDeclaration(type, name));
297 jj_consume_token(GREATER_THAN);
298 //System.out.println(params);
299 {if ("" != null) return params;}
300 throw new Error("Missing return statement in function");
303 final public ArrayList<VariableDeclaration > FormalParamList() throws ParseException {ArrayList<VariableDeclaration > typeParams;
304 VariableDeclaration varDecl;
305 typeParams = new ArrayList<VariableDeclaration >();
306 jj_consume_token(OPEN_PAREN);
307 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
313 varDecl = TypeParam();
314 typeParams.add(varDecl);
317 switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
326 jj_consume_token(COMMA);
327 varDecl = TypeParam();
328 typeParams.add(varDecl);
336 jj_consume_token(CLOSE_PAREN);
337 {if ("" != null) return typeParams;}
338 throw new Error("Missing return statement in function");
341 final public VariableDeclaration Declaration() throws ParseException {String type, param;
343 param = jj_consume_token(IDENTIFIER).image;
344 jj_consume_token(SEMI_COLON);
345 {if ("" != null) return new VariableDeclaration(type, param);}
346 throw new Error("Missing return statement in function");
349 final public VariableDeclaration TypeParam() throws ParseException {String type, param;
351 param = jj_consume_token(IDENTIFIER).image;
352 {if ("" != null) return new VariableDeclaration(type, param);}
353 throw new Error("Missing return statement in function");
356 /** Generated Token Manager. */
357 public UtilParserTokenManager token_source;
358 JavaCharStream jj_input_stream;
359 /** Current token. */
365 final private int[] jj_la1 = new int[13];
366 static private int[] jj_la1_0;
367 static private int[] jj_la1_1;
368 static private int[] jj_la1_2;
374 private static void jj_la1_init_0() {
375 jj_la1_0 = new int[] {0x40,0x380,0x380,0x20000040,0x20000040,0x4000000,0x0,0x1800,0x1800,0x0,0x4000000,0x4000000,0x103c0,};
377 private static void jj_la1_init_1() {
378 jj_la1_1 = new int[] {0x0,0x0,0x0,0x1,0x1,0x0,0x200,0x0,0x0,0x100000,0x0,0x0,0x0,};
380 private static void jj_la1_init_2() {
381 jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
384 /** Constructor with InputStream. */
385 public UtilParser(java.io.InputStream stream) {
388 /** Constructor with InputStream and supplied encoding */
389 public UtilParser(java.io.InputStream stream, String encoding) {
390 try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
391 token_source = new UtilParserTokenManager(jj_input_stream);
395 for (int i = 0; i < 13; i++) jj_la1[i] = -1;
399 public void ReInit(java.io.InputStream stream) {
400 ReInit(stream, null);
403 public void ReInit(java.io.InputStream stream, String encoding) {
404 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
405 token_source.ReInit(jj_input_stream);
409 for (int i = 0; i < 13; i++) jj_la1[i] = -1;
413 public UtilParser(java.io.Reader stream) {
414 jj_input_stream = new JavaCharStream(stream, 1, 1);
415 token_source = new UtilParserTokenManager(jj_input_stream);
419 for (int i = 0; i < 13; i++) jj_la1[i] = -1;
423 public void ReInit(java.io.Reader stream) {
424 jj_input_stream.ReInit(stream, 1, 1);
425 token_source.ReInit(jj_input_stream);
429 for (int i = 0; i < 13; i++) jj_la1[i] = -1;
432 /** Constructor with generated Token Manager. */
433 public UtilParser(UtilParserTokenManager tm) {
438 for (int i = 0; i < 13; i++) jj_la1[i] = -1;
442 public void ReInit(UtilParserTokenManager tm) {
447 for (int i = 0; i < 13; i++) jj_la1[i] = -1;
450 private Token jj_consume_token(int kind) throws ParseException {
452 if ((oldToken = token).next != null) token = token.next;
453 else token = token.next = token_source.getNextToken();
455 if (token.kind == kind) {
461 throw generateParseException();
465 /** Get the next Token. */
466 final public Token getNextToken() {
467 if (token.next != null) token = token.next;
468 else token = token.next = token_source.getNextToken();
474 /** Get the specific Token. */
475 final public Token getToken(int index) {
477 for (int i = 0; i < index; i++) {
478 if (t.next != null) t = t.next;
479 else t = t.next = token_source.getNextToken();
484 private int jj_ntk_f() {
485 if ((jj_nt=token.next) == null)
486 return (jj_ntk = (token.next=token_source.getNextToken()).kind);
488 return (jj_ntk = jj_nt.kind);
491 private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
492 private int[] jj_expentry;
493 private int jj_kind = -1;
495 /** Generate ParseException. */
496 public ParseException generateParseException() {
497 jj_expentries.clear();
498 boolean[] la1tokens = new boolean[80];
500 la1tokens[jj_kind] = true;
503 for (int i = 0; i < 13; i++) {
504 if (jj_la1[i] == jj_gen) {
505 for (int j = 0; j < 32; j++) {
506 if ((jj_la1_0[i] & (1<<j)) != 0) {
509 if ((jj_la1_1[i] & (1<<j)) != 0) {
510 la1tokens[32+j] = true;
512 if ((jj_la1_2[i] & (1<<j)) != 0) {
513 la1tokens[64+j] = true;
518 for (int i = 0; i < 80; i++) {
520 jj_expentry = new int[1];
522 jj_expentries.add(jj_expentry);
525 int[][] exptokseq = new int[jj_expentries.size()][];
526 for (int i = 0; i < jj_expentries.size(); i++) {
527 exptokseq[i] = jj_expentries.get(i);
529 return new ParseException(token, exptokseq, tokenImage);
532 /** Enable tracing. */
533 final public void enable_tracing() {
536 /** Disable tracing. */
537 final public void disable_tracing() {