📄 lex.cpp
字号:
else n = (n<<4) + d; } if ((char *)rcp - token <= 2) //error("invalid hexadecimal constant `%S'\n", token, (char *)rcp-token); printf("invalid hexadecimal constant `%S'\n", token, (char *)rcp-token); cp = rcp; //tsym = icon(n, overflow, 16); } else if (*token == '0') { int err = 0, overflow = 0; for ( ; map[*rcp]&DIGIT; rcp++) { if (*rcp == '8' || *rcp == '9') err = 1; if (n&~((unsigned)-1 >> 3)) overflow = 1; else n = (n<<3) + (unsigned)(*rcp - '0'); } if (*rcp == '.' || *rcp == 'e' || *rcp == 'E') { cp = rcp; //tsym = fcon(); fcon(); return FCON; } cp = rcp; //tsym = icon(n, overflow, 8); if (err) //error("invalid octal constant `%S'\n", token, (char*)cp-token); printf("invalid octal constant `%S'\n", token, (char*)cp-token); } else { int overflow = 0; for (n = *token - '0'; map[*rcp]&DIGIT; ) { int d = *rcp++ - '0'; if (n > ((unsigned)UINT_MAX - d)/10) overflow = 1; else n = 10*n + d; } if (*rcp == '.' || *rcp == 'e' || *rcp == 'E') { cp = rcp; //tsym = fcon(); fcon(); return FCON; } cp = rcp; //tsym = icon(n, overflow, 10); } return ICON; } case '.': if (rcp[0] == '.' && rcp[1] == '.') { cp += 2; return ELLIPSIS; } if ((map[*rcp]&DIGIT) == 0) return '.'; if (limit - rcp < MAXLINE) { cp = rcp - 1; fillbuf(); rcp = ++cp; } assert(cp == rcp); cp = rcp - 1; token = (char *)cp; //tsym = fcon(); fcon(); return FCON;scon: case '\'': case '"': { static char cbuf[BUFSIZE+1]; char *s = cbuf; int nbad = 0; *s++ = *--cp; do { cp++; while (*cp != cbuf[0]) { int c; if (map[*cp]&NEWLINE) { if (cp < limit) break; cp++; nextline(); if (cp == limit) break; continue; } c = *cp++; if (c == '\\') { if (map[*cp]&NEWLINE) { if (cp < limit) break; cp++; nextline(); } if (limit - cp < MAXTOKEN) fillbuf(); c = backslash(cbuf[0]); } else if (map[c] == 0) nbad++; if (s < &cbuf[sizeof cbuf] - 2) *s++ = c; } if (*cp == cbuf[0]) cp++; else //error("missing %c\n", cbuf[0]); printf("missing %c\n", cbuf[0]); } while (cbuf[0] == '"' && getchr() == '"'); *s++ = 0; if (s >= &cbuf[sizeof cbuf]) //error("%s literal too long\n", cbuf[0] == '"' ? "string" : "character"); printf("%s literal too long\n", cbuf[0] == '"' ? "string" : "character"); //if (Aflag >= 2 && cbuf[0] == '"' && s - cbuf - 1 > 509) // warning("more than 509 characters in a string literal\n"); //if (Aflag >= 2 && nbad) // warning("%s literal contains non-portable characters\n", cbuf[0] == '"' ? "string" : "character"); token = cbuf; //tsym = &tval; if (cbuf[0] == '"') { //tval.type = array(chartype, s - cbuf - 1, 0); //tval.u.c.v.p = cbuf + 1; return SCON; } else { if (s - cbuf > 3) //warning("excess characters in multibyte character literal `%S' ignored\n", token, (char*)cp-token); printf("excess characters in multibyte character literal `%S' ignored\n", token, (char*)cp-token); else if (s - cbuf <= 2) //error("missing '\n"); printf("missing '\n"); //tval.type = inttype; //tval.u.c.v.i = cbuf[1]; return ICON; } } case 'a': if (rcp[0] == 'u' && rcp[1] == 't' && rcp[2] == 'o' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; return AUTO; } goto id; case 'b': if (rcp[0] == 'r' && rcp[1] == 'e' && rcp[2] == 'a' && rcp[3] == 'k' && !(map[rcp[4]]&(DIGIT|LETTER))) { cp = rcp + 4; return BREAK; } goto id; case 'c': if (rcp[0] == 'a' && rcp[1] == 's' && rcp[2] == 'e' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; return CASE; } if (rcp[0] == 'h' && rcp[1] == 'a' && rcp[2] == 'r' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; //tsym = chartype->u.sym; return CHAR; } if (rcp[0] == 'o' && rcp[1] == 'n' && rcp[2] == 's' && rcp[3] == 't' && !(map[rcp[4]]&(DIGIT|LETTER))) { cp = rcp + 4; return CONST; } if (rcp[0] == 'o' && rcp[1] == 'n' && rcp[2] == 't' && rcp[3] == 'i' && rcp[4] == 'n' && rcp[5] == 'u' && rcp[6] == 'e' && !(map[rcp[7]]&(DIGIT|LETTER))) { cp = rcp + 7; return CONTINUE; } goto id; case 'd': if (rcp[0] == 'e' && rcp[1] == 'f' && rcp[2] == 'a' && rcp[3] == 'u' && rcp[4] == 'l' && rcp[5] == 't' && !(map[rcp[6]]&(DIGIT|LETTER))) { cp = rcp + 6; return DEFAULT; } if (rcp[0] == 'o' && rcp[1] == 'u' && rcp[2] == 'b' && rcp[3] == 'l' && rcp[4] == 'e' && !(map[rcp[5]]&(DIGIT|LETTER))) { cp = rcp + 5; //tsym = doubletype->u.sym; return DOUBLE; } if (rcp[0] == 'o' && !(map[rcp[1]]&(DIGIT|LETTER))) { cp = rcp + 1; return DO; } goto id; case 'e': if (rcp[0] == 'l' && rcp[1] == 's' && rcp[2] == 'e' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; return ELSE; } if (rcp[0] == 'n' && rcp[1] == 'u' && rcp[2] == 'm' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; return ENUM; } if (rcp[0] == 'x' && rcp[1] == 't' && rcp[2] == 'e' && rcp[3] == 'r' && rcp[4] == 'n' && !(map[rcp[5]]&(DIGIT|LETTER))) { cp = rcp + 5; return EXTERN; } goto id; case 'f': if (rcp[0] == 'l' && rcp[1] == 'o' && rcp[2] == 'a' && rcp[3] == 't' && !(map[rcp[4]]&(DIGIT|LETTER))) { cp = rcp + 4; //tsym = floattype->u.sym; return FLOAT; } if (rcp[0] == 'o' && rcp[1] == 'r' && !(map[rcp[2]]&(DIGIT|LETTER))) { cp = rcp + 2; return FOR; } goto id; case 'g': if (rcp[0] == 'o' && rcp[1] == 't' && rcp[2] == 'o' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; return GOTO; } goto id; case 'l': if (rcp[0] == 'o' && rcp[1] == 'n' && rcp[2] == 'g' && !(map[rcp[3]]&(DIGIT|LETTER))) { cp = rcp + 3; //tsym = longtype->u.sym; return LONG; } goto id; case 'r': if (rcp[0] == 'e' && rcp[1] == 'g' && rcp[2] == 'i' && rcp[3] == 's' && rcp[4] == 't' && rcp[5] == 'e' && rcp[6] == 'r' && !(map[rcp[7]]&(DIGIT|LETTER))) { cp = rcp + 7; return REGISTER; } if (rcp[0] == 'e' && rcp[1] == 't' && rcp[2] == 'u' && rcp[3] == 'r' && rcp[4] == 'n' && !(map[rcp[5]]&(DIGIT|LETTER))) { cp = rcp + 5; return RETURN; } goto id; case 's':
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -