generate more structured code
[cdsspec-compiler.git] / src / edu / uci / eecs / specCompiler / codeGenerator / IDExtractor.java
1 package edu.uci.eecs.specCompiler.codeGenerator;
2
3 public class IDExtractor {
4         private String code;
5         private int index = 0;
6         
7         private int idBeginIdx, idEndIdx;
8
9         public IDExtractor(String code) {
10                 this.code = code;
11                 this.index = 0;
12         }
13         
14         public IDExtractor(String code, int beginIdx) {
15                 this.code = code;
16                 this.index = beginIdx;
17         }
18         
19         public void reset(int beginIdx) {
20                 this.index = beginIdx;
21         }
22
23         public void reset() {
24                 this.index = 0;
25         }
26         
27         public int getIDBeginIdx() {
28                 return this.idBeginIdx;
29         }
30         
31         public int getIDEndIdx() {
32                 return this.idEndIdx;
33         }
34         
35         public int lineNumOfID() {
36                 int cnt = 0;
37                 for (int i = 0; i < idBeginIdx; i++) {
38                         if (code.charAt(i) == '\n')
39                                 cnt++;
40                 }
41                 return cnt;
42         }
43         
44         public int lineBeginIdxOfID() {
45                 int i;
46                 for (i = idBeginIdx - 1; i >= 0; i--) {
47                         if (code.charAt(i) == '\n')
48                                 break;
49                 }
50                 return i + 1;
51         }
52         
53         public int lineEndIdxOfID() {
54                 int i = 0;
55                 for (i = idEndIdx + 1; i < code.length(); i++) {
56                         if (code.charAt(i) == '\n') {
57                                 break;
58                         }
59                 }
60                 return i - 1;
61         }
62         
63         public String getPrevID() {
64                 int beginIdx = index;
65                 int endIdx = index;
66                 char ch;
67                 while (true) {
68                         ch = code.charAt(endIdx);
69                         if ((ch == '_' || (ch >= 'a' && ch <= 'z') || ch >= 'A'
70                                         && ch <= 'Z')) {
71                                 break;
72                         }
73                         endIdx--;
74                 }
75                 beginIdx = endIdx;
76                 while (true) {
77                         ch = code.charAt(beginIdx);
78                         if (!((ch == '_' || (ch >= 'a' && ch <= 'z') || ch >= 'A'
79                                         && ch <= 'Z'))) {
80                                 break;
81                         }
82                         beginIdx--;
83                 }
84                 index = beginIdx;
85                 if (beginIdx > endIdx)
86                         return null;
87                 idBeginIdx = beginIdx + 1;
88                 idEndIdx = endIdx;
89                 return code.substring(beginIdx + 1, endIdx + 1);
90         }
91
92         public String getNextID() {
93                 int beginIdx = index;
94                 int endIdx = index;
95                 char ch;
96                 while (true) {
97                         ch = code.charAt(beginIdx);
98                         if ((ch == '_' || (ch >= 'a' && ch <= 'z') || ch >= 'A'
99                                         && ch <= 'Z')) {
100                                 break;
101                         }
102                         beginIdx++;
103                 }
104                 endIdx = beginIdx;
105                 while (true) {
106                         ch = code.charAt(endIdx);
107                         if (!((ch == '_' || (ch >= 'a' && ch <= 'z') || ch >= 'A'
108                                         && ch <= 'Z'))) {
109                                 break;
110                         }
111                         endIdx++;
112                 }
113                 index = endIdx;
114                 if (beginIdx > endIdx)
115                         return null;
116                 idBeginIdx = beginIdx;
117                 idEndIdx = endIdx - 1;
118                 return code.substring(beginIdx, endIdx);
119         }
120 }