public CcsPosition_t GetPosition(CcsToken_t begin, CcsToken_t end) { int len = (int)(end.pos - begin.pos); return(new CcsPosition_t(begin.pos, len, begin.col, buffer.GetString(begin.pos, len))); }
public CcsParser_t(string fname, TextWriter errwriter) { errpool = new CcsErrorPool_t(errwriter); scanner = new CcsScanner_t(errpool, fname); t = la = null; /*---- constructor ----*/ maxT = 12; /*---- enable ----*/ }
/*---- enable ----*/ public void Parse() { t = null; la = scanner.GetDummy(); Get(); /*---- ParseRoot ----*/ pgn(); /*---- enable ----*/ Expect(0); }
public CcsToken_t(int kind, long pos, int col, int line, string val) { this.next = null; this.refcnt = 0; this.kind = kind; this.pos = pos; this.col = col; this.line = line; this.val = val; }
public CcsToken_t Peek() { CcsToken_t cur; do { if (peekToken == null) { peekToken = NextToken(); if (peekToken == busyTokenList) { buffer.SetBusy(busyTokenList.pos); } } cur = peekToken; peekToken = cur.next; } while (cur.kind > maxT); /* Skip pragmas */ ++cur.refcnt; return(cur); }
public void DecRef(CcsToken_t token) { CcsToken_t prevToken, curToken; if (token == dummyToken) { return; } if (--token.refcnt > 0) { return; } Debug.Assert(busyTokenList != null); for (prevToken = null, curToken = busyTokenList; curToken != token; prevToken = curToken, curToken = curToken.next) { Debug.Assert(curToken != null && curToken != this.curToken); } /* Found, *curToken == token, detach and destroy it. */ if (prevToken == null) { busyTokenList = curToken.next; } else { prevToken.next = curToken.next; } token = null; /* Adjust CcsBuffer busy pointer */ if (prevToken == null) { if (busyTokenList != null) { buffer.SetBusy(busyTokenList.pos); } else { buffer.ClearBusy(); } } }
public CcsToken_t Peek() { CcsToken_t cur; do { if (peekToken == null) { peekToken = NextToken(); if (peekToken == busyTokenList) buffer.SetBusy(busyTokenList.pos); } cur = peekToken; peekToken = cur.next; } while (cur.kind > maxT); /* Skip pragmas */ ++cur.refcnt; return cur; }
public void IncRef(CcsToken_t token) { ++token.refcnt; }
public CcsToken_t NextToken() { long pos; int line, col, state, kind; CcsToken_t t; int curComment; for (;;) { while (ch == ' ' /*---- scan1 ----*/ || (ch >= '\t' && ch <= '\n') || ch == '\r' /*---- enable ----*/ ) GetCh(); for (curComment = 0; curComment < comments.Length; ++curComment) if (ch == comments[curComment].start[0] && Comment(comments[curComment])) break; if (curComment >= comments.Length) break; } pos = this.pos; line = this.line; col = this.col; buffer.Lock(); state = Char2State(ch); GetCh(); kind = noSym; switch (state) { case -1: kind = eofSym; break; case 0: kind = noSym; break; /*---- scan3 ----*/ case 1: if ((ch >= 'A' && ch <= 'Z') || ch == '_' || (ch >= 'a' && ch <= 'z')) { GetCh(); goto case_2; } else { kind = noSym; break; } case 2: case_2: if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || ch == '_' || (ch >= 'a' && ch <= 'z')) { GetCh(); goto case_2; } else { kind = 1; break; } case 3: case_3: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_3; } else { kind = 2; break; } case 4: case_4: if ((ch >= 0 && ch <= '\t') || (ch >= '\v' && ch <= '\f') || (ch >= 14 && ch <= '!') || (ch >= '#' && ch <= '[') || (ch >= ']' && ch <= 65535)) { GetCh(); goto case_4; } else if (ch == '"') { GetCh(); goto case_5; } else if (ch == '\\') { GetCh(); goto case_6; } else { kind = noSym; break; } case 5: case_5: if (ch == ']') { GetCh(); goto case_7; } else { kind = noSym; break; } case 6: case_6: if ((ch >= ' ' && ch <= '~')) { GetCh(); goto case_4; } else { kind = noSym; break; } case 7: case_7: { kind = 3; break; } case 8: case_8: if ((ch >= 0 && ch <= '\t') || (ch >= '\v' && ch <= '\f') || (ch >= 14 && ch <= '[') || (ch >= ']' && ch <= '|') || (ch >= '~' && ch <= 65535)) { GetCh(); goto case_8; } else if (ch == '}') { GetCh(); goto case_10; } else if (ch == '\\') { GetCh(); goto case_9; } else { kind = noSym; break; } case 9: case_9: if ((ch >= ' ' && ch <= '~')) { GetCh(); goto case_8; } else { kind = noSym; break; } case 10: case_10: { kind = 4; break; } case 11: case_11: if ((ch >= 'a' && ch <= 'h')) { GetCh(); goto case_12; } else { kind = noSym; break; } case 12: case_12: if ((ch >= '1' && ch <= '8')) { GetCh(); goto case_13; } else { kind = noSym; break; } case 13: case_13: if (ch == '#') { GetCh(); goto case_17; } else if (ch == '+') { GetCh(); goto case_14; } else if (ch == '?') { GetCh(); goto case_15; } else if (ch == '!') { GetCh(); goto case_16; } else { kind = 5; break; } case 14: case_14: if (ch == '+') { GetCh(); goto case_14; } else { kind = 5; break; } case 15: case_15: if (ch == '?') { GetCh(); goto case_15; } else { kind = 5; break; } case 16: case_16: if (ch == '!') { GetCh(); goto case_16; } else { kind = 5; break; } case 17: case_17: { kind = 5; break; } case 18: case_18: if (ch == '+') { GetCh(); goto case_18; } else { kind = 6; break; } case 19: case_19: if (ch == '?') { GetCh(); goto case_19; } else { kind = 6; break; } case 20: case_20: if (ch == '!') { GetCh(); goto case_20; } else { kind = 6; break; } case 21: case_21: { kind = 6; break; } case 22: case_22: if (ch == 'O') { GetCh(); goto case_23; } else { kind = noSym; break; } case 23: case_23: if (ch == '#') { GetCh(); goto case_27; } else if (ch == '+') { GetCh(); goto case_24; } else if (ch == '?') { GetCh(); goto case_25; } else if (ch == '!') { GetCh(); goto case_26; } else { kind = 7; break; } case 24: case_24: if (ch == '+') { GetCh(); goto case_24; } else { kind = 7; break; } case 25: case_25: if (ch == '?') { GetCh(); goto case_25; } else { kind = 7; break; } case 26: case_26: if (ch == '!') { GetCh(); goto case_26; } else { kind = 7; break; } case 27: case_27: { kind = 7; break; } case 28: if ((ch >= '1' && ch <= '8')) { GetCh(); goto case_30; } else if ((ch >= 'a' && ch <= 'h')) { GetCh(); goto case_12; } else if (ch == 'x') { GetCh(); goto case_11; } else { kind = noSym; break; } case 29: if (ch == '-') { GetCh(); goto case_31; } else { kind = noSym; break; } case 30: case_30: if ((ch >= 'a' && ch <= 'h')) { GetCh(); goto case_12; } else if (ch == '#') { GetCh(); goto case_17; } else if (ch == '+') { GetCh(); goto case_14; } else if (ch == '?') { GetCh(); goto case_15; } else if (ch == '!') { GetCh(); goto case_16; } else if (ch == 'x') { GetCh(); goto case_11; } else { kind = 5; break; } case 31: case_31: if (ch == 'O') { GetCh(); goto case_32; } else { kind = noSym; break; } case 32: case_32: if (ch == '#') { GetCh(); goto case_21; } else if (ch == '+') { GetCh(); goto case_18; } else if (ch == '?') { GetCh(); goto case_19; } else if (ch == '!') { GetCh(); goto case_20; } else if (ch == '-') { GetCh(); goto case_22; } else { kind = 6; break; } case 33: { kind = 8; break; } case 34: case_34: if (ch == '0') { GetCh(); goto case_35; } else { kind = noSym; break; } case 35: case_35: { kind = 9; break; } case 36: case_36: if (ch == '1') { GetCh(); goto case_37; } else { kind = noSym; break; } case 37: case_37: { kind = 10; break; } case 38: case_38: if (ch == '2') { GetCh(); goto case_39; } else { kind = noSym; break; } case 39: case_39: if (ch == '-') { GetCh(); goto case_40; } else { kind = noSym; break; } case 40: case_40: if (ch == '1') { GetCh(); goto case_41; } else { kind = noSym; break; } case 41: case_41: if (ch == '/') { GetCh(); goto case_42; } else { kind = noSym; break; } case 42: case_42: if (ch == '2') { GetCh(); goto case_43; } else { kind = noSym; break; } case 43: case_43: { kind = 11; break; } case 44: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_3; } else if (ch == '-') { GetCh(); goto case_34; } else if (ch == '/') { GetCh(); goto case_38; } else { kind = 2; break; } case 45: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_3; } else if (ch == '-') { GetCh(); goto case_36; } else { kind = 2; break; } /*---- enable ----*/ } t = new CcsToken_t(kind, pos, col, line, buffer.GetString(pos, (int)(this.pos - pos))); buffer.Unlock(); return t; }
public CcsPosition_t GetPosition(CcsToken_t begin, CcsToken_t end) { int len = (int)(end.pos - begin.pos); return new CcsPosition_t(begin.pos, len, begin.col, buffer.GetString(begin.pos, len)); }
public CcsPosition_t GetPositionBetween(CcsToken_t begin, CcsToken_t end) { long begpos = begin.pos + begin.val.Length; int len = (int)(end.pos - begpos); string str = buffer.GetString(begpos, len); int cur; /* Skip the leading spaces. */ for (cur = 0; cur < len; ++cur) if (str[cur] != ' ' && str[cur] != '\t' && str[cur] != '\r' && str[cur] != '\n') break; return new CcsPosition_t(begpos + cur, len - cur, 0, str.Substring(cur)); }
/*---- members ----*/ /*---- enable ----*/ private void Get() { t = la; for (;;) { la = scanner.Scan(); if (la.kind <= maxT) { /*++self->errDist;*/ break; } /*---- Pragmas ----*/ /*---- enable ----*/ } }
public void DecRef(CcsToken_t token) { CcsToken_t prevToken, curToken; if (token == dummyToken) return; if (--token.refcnt > 0) return; Debug.Assert(busyTokenList != null); for (prevToken = null, curToken = busyTokenList; curToken != token; prevToken = curToken, curToken = curToken.next) Debug.Assert(curToken != null && curToken != this.curToken); /* Found, *curToken == token, detach and destroy it. */ if (prevToken == null) busyTokenList = curToken.next; else prevToken.next = curToken.next; token = null; /* Adjust CcsBuffer busy pointer */ if (prevToken == null) { if (busyTokenList != null) buffer.SetBusy(busyTokenList.pos); else buffer.ClearBusy(); } }
private void Init() { /*---- declarations ----*/ caseSensitive = true; eofSym = 0; maxT = 12; noSym = 12; /*---- enable ----*/ busyTokenList = null; curToken = null; peekToken = null; ch = 0; chBytes = 0; pos = 0; line = 1; col = 0; oldEols = 0; oldEolsEOL = false; GetCh(); }
public void ResetPeek() { peekToken = curToken; }
public void SemErr(CcsToken_t token, string str) { errpool.Error(token.line, token.col, str); }
public CcsToken_t Scan() { CcsToken_t cur; if (curToken == null) { curToken = NextToken(); if (curToken == busyTokenList) buffer.SetBusy(busyTokenList.pos); } cur = curToken; peekToken = curToken = cur.next; ++cur.refcnt; return cur; }
public CcsToken_t NextToken() { long pos; int line, col, state, kind; CcsToken_t t; int curComment; for (;;) { while (ch == ' ' /*---- scan1 ----*/ || (ch >= '\t' && ch <= '\n') || ch == '\r' /*---- enable ----*/ ) GetCh(); for (curComment = 0; curComment < comments.Length; ++curComment) if (ch == comments[curComment].start[0] && Comment(comments[curComment])) break; if (curComment >= comments.Length) break; } pos = this.pos; line = this.line; col = this.col; buffer.Lock(); state = Char2State(ch); GetCh(); kind = noSym; switch (state) { case -1: kind = eofSym; break; case 0: kind = noSym; break; /*---- scan3 ----*/ case 1: case_1: if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || ch == '_' || (ch >= 'a' && ch <= 'z')) { GetCh(); goto case_1; } else { kind = GetKWKind(pos, this.pos, 1); break; } case 2: case_2: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_2; } else { kind = 2; break; } case 3: case_3: { kind = 3; break; } case 4: case_4: { kind = 4; break; } case 5: if ((ch >= 0 && ch <= '\t') || (ch >= '\v' && ch <= '\f') || (ch >= 14 && ch <= '&') || (ch >= '(' && ch <= '[') || (ch >= ']' && ch <= 65535)) { GetCh(); goto case_6; } else if (ch == '\\') { GetCh(); goto case_7; } else { kind = noSym; break; } case 6: case_6: if (ch == '\'') { GetCh(); goto case_9; } else { kind = noSym; break; } case 7: case_7: if ((ch >= ' ' && ch <= '~')) { GetCh(); goto case_8; } else { kind = noSym; break; } case 8: case_8: if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f')) { GetCh(); goto case_8; } else if (ch == '\'') { GetCh(); goto case_9; } else { kind = noSym; break; } case 9: case_9: { kind = 5; break; } case 10: case_10: if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || ch == '_' || (ch >= 'a' && ch <= 'z')) { GetCh(); goto case_10; } else { kind = 48; break; } case 11: case_11: if ((ch >= 0 && ch <= '\t') || (ch >= '\v' && ch <= '\f') || (ch >= 14 && ch <= '!') || (ch >= '#' && ch <= '[') || (ch >= ']' && ch <= 65535)) { GetCh(); goto case_11; } else if (ch == '"') { GetCh(); goto case_3; } else if (ch == '\\') { GetCh(); goto case_12; } else if (ch == '\n' || ch == '\r') { GetCh(); goto case_4; } else { kind = noSym; break; } case 12: case_12: if ((ch >= ' ' && ch <= '~')) { GetCh(); goto case_11; } else { kind = noSym; break; } case 13: { kind = 20; break; } case 14: { kind = 26; break; } case 15: { kind = 27; break; } case 16: case_16: { kind = 28; break; } case 17: { kind = 31; break; } case 18: case_18: { kind = 32; break; } case 19: case_19: { kind = 33; break; } case 20: { kind = 34; break; } case 21: { kind = 37; break; } case 22: { kind = 38; break; } case 23: { kind = 39; break; } case 24: { kind = 40; break; } case 25: { kind = 41; break; } case 26: case_26: { kind = 45; break; } case 27: case_27: { kind = 46; break; } case 28: if (ch == '.') { GetCh(); goto case_16; } else if (ch == '>') { GetCh(); goto case_19; } else if (ch == ')') { GetCh(); goto case_27; } else { kind = 21; break; } case 29: if (ch == '.') { GetCh(); goto case_18; } else { kind = 30; break; } case 30: if (ch == '.') { GetCh(); goto case_26; } else { kind = 36; break; } /*---- enable ----*/ } t = new CcsToken_t(kind, pos, col, line, buffer.GetString(pos, (int)(this.pos - pos))); buffer.Unlock(); return t; }
public CcsScanner_t(CcsErrorPool_t errpool, string filename) { Stream stream; this.errpool = errpool; stream = new FileStream(filename, FileMode.Open); dummyToken = new CcsToken_t(0, 0, 0, 0, "dummy"); buffer = new CcsBuffer_t(stream); Init(); }
public CcsToken_t NextToken() { long pos; int line, col, state, kind; CcsToken_t t; int curComment; for (;;) { while (ch == ' ' /*---- scan1 ----*/ || (ch >= '\t' && ch <= '\n') || ch == '\r' /*---- enable ----*/ ) { GetCh(); } for (curComment = 0; curComment < comments.Length; ++curComment) { if (ch == comments[curComment].start[0] && Comment(comments[curComment])) { break; } } if (curComment >= comments.Length) { break; } } pos = this.pos; line = this.line; col = this.col; buffer.Lock(); state = Char2State(ch); GetCh(); kind = noSym; switch (state) { case -1: kind = eofSym; break; case 0: kind = noSym; break; /*---- scan3 ----*/ case 1: if ((ch >= 'A' && ch <= 'Z') || ch == '_' || (ch >= 'a' && ch <= 'z')) { GetCh(); goto case_2; } else { kind = noSym; break; } case 2: case_2: if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || ch == '_' || (ch >= 'a' && ch <= 'z')) { GetCh(); goto case_2; } else { kind = 1; break; } case 3: case_3: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_3; } else { kind = 2; break; } case 4: case_4: if ((ch >= 0 && ch <= '\t') || (ch >= '\v' && ch <= '\f') || (ch >= 14 && ch <= '!') || (ch >= '#' && ch <= '[') || (ch >= ']' && ch <= 65535)) { GetCh(); goto case_4; } else if (ch == '"') { GetCh(); goto case_5; } else if (ch == '\\') { GetCh(); goto case_6; } else { kind = noSym; break; } case 5: case_5: if (ch == ']') { GetCh(); goto case_7; } else { kind = noSym; break; } case 6: case_6: if ((ch >= ' ' && ch <= '~')) { GetCh(); goto case_4; } else { kind = noSym; break; } case 7: case_7: { kind = 3; break; } case 8: case_8: if ((ch >= 0 && ch <= '\t') || (ch >= '\v' && ch <= '\f') || (ch >= 14 && ch <= '[') || (ch >= ']' && ch <= '|') || (ch >= '~' && ch <= 65535)) { GetCh(); goto case_8; } else if (ch == '}') { GetCh(); goto case_10; } else if (ch == '\\') { GetCh(); goto case_9; } else { kind = noSym; break; } case 9: case_9: if ((ch >= ' ' && ch <= '~')) { GetCh(); goto case_8; } else { kind = noSym; break; } case 10: case_10: { kind = 4; break; } case 11: case_11: if ((ch >= 'a' && ch <= 'h')) { GetCh(); goto case_12; } else { kind = noSym; break; } case 12: case_12: if ((ch >= '1' && ch <= '8')) { GetCh(); goto case_13; } else { kind = noSym; break; } case 13: case_13: if (ch == '#') { GetCh(); goto case_17; } else if (ch == '+') { GetCh(); goto case_14; } else if (ch == '?') { GetCh(); goto case_15; } else if (ch == '!') { GetCh(); goto case_16; } else { kind = 5; break; } case 14: case_14: if (ch == '+') { GetCh(); goto case_14; } else { kind = 5; break; } case 15: case_15: if (ch == '?') { GetCh(); goto case_15; } else { kind = 5; break; } case 16: case_16: if (ch == '!') { GetCh(); goto case_16; } else { kind = 5; break; } case 17: case_17: { kind = 5; break; } case 18: case_18: if (ch == '+') { GetCh(); goto case_18; } else { kind = 6; break; } case 19: case_19: if (ch == '?') { GetCh(); goto case_19; } else { kind = 6; break; } case 20: case_20: if (ch == '!') { GetCh(); goto case_20; } else { kind = 6; break; } case 21: case_21: { kind = 6; break; } case 22: case_22: if (ch == 'O') { GetCh(); goto case_23; } else { kind = noSym; break; } case 23: case_23: if (ch == '#') { GetCh(); goto case_27; } else if (ch == '+') { GetCh(); goto case_24; } else if (ch == '?') { GetCh(); goto case_25; } else if (ch == '!') { GetCh(); goto case_26; } else { kind = 7; break; } case 24: case_24: if (ch == '+') { GetCh(); goto case_24; } else { kind = 7; break; } case 25: case_25: if (ch == '?') { GetCh(); goto case_25; } else { kind = 7; break; } case 26: case_26: if (ch == '!') { GetCh(); goto case_26; } else { kind = 7; break; } case 27: case_27: { kind = 7; break; } case 28: if ((ch >= '1' && ch <= '8')) { GetCh(); goto case_30; } else if ((ch >= 'a' && ch <= 'h')) { GetCh(); goto case_12; } else if (ch == 'x') { GetCh(); goto case_11; } else { kind = noSym; break; } case 29: if (ch == '-') { GetCh(); goto case_31; } else { kind = noSym; break; } case 30: case_30: if ((ch >= 'a' && ch <= 'h')) { GetCh(); goto case_12; } else if (ch == '#') { GetCh(); goto case_17; } else if (ch == '+') { GetCh(); goto case_14; } else if (ch == '?') { GetCh(); goto case_15; } else if (ch == '!') { GetCh(); goto case_16; } else if (ch == 'x') { GetCh(); goto case_11; } else { kind = 5; break; } case 31: case_31: if (ch == 'O') { GetCh(); goto case_32; } else { kind = noSym; break; } case 32: case_32: if (ch == '#') { GetCh(); goto case_21; } else if (ch == '+') { GetCh(); goto case_18; } else if (ch == '?') { GetCh(); goto case_19; } else if (ch == '!') { GetCh(); goto case_20; } else if (ch == '-') { GetCh(); goto case_22; } else { kind = 6; break; } case 33: { kind = 8; break; } case 34: case_34: if (ch == '0') { GetCh(); goto case_35; } else { kind = noSym; break; } case 35: case_35: { kind = 9; break; } case 36: case_36: if (ch == '1') { GetCh(); goto case_37; } else { kind = noSym; break; } case 37: case_37: { kind = 10; break; } case 38: case_38: if (ch == '2') { GetCh(); goto case_39; } else { kind = noSym; break; } case 39: case_39: if (ch == '-') { GetCh(); goto case_40; } else { kind = noSym; break; } case 40: case_40: if (ch == '1') { GetCh(); goto case_41; } else { kind = noSym; break; } case 41: case_41: if (ch == '/') { GetCh(); goto case_42; } else { kind = noSym; break; } case 42: case_42: if (ch == '2') { GetCh(); goto case_43; } else { kind = noSym; break; } case 43: case_43: { kind = 11; break; } case 44: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_3; } else if (ch == '-') { GetCh(); goto case_34; } else if (ch == '/') { GetCh(); goto case_38; } else { kind = 2; break; } case 45: if ((ch >= '0' && ch <= '9')) { GetCh(); goto case_3; } else if (ch == '-') { GetCh(); goto case_36; } else { kind = 2; break; } /*---- enable ----*/ } t = new CcsToken_t(kind, pos, col, line, buffer.GetString(pos, (int)(this.pos - pos))); buffer.Unlock(); return(t); }