Browse Source

lexical #4/6, parentheses and braces

rlar 14 years ago
parent
commit
aa188c0766
  1. 36
      src/frontend/parser/lexical.c

36
src/frontend/parser/lexical.c

@ -102,7 +102,7 @@ pwlist_echo( /*CDHW used to perform function of set echo */
{ {
wordlist *wl; wordlist *wl;
if ((!cp_echo)||cp_debug) /* cpdebug prints the same info */
if (!cp_echo || cp_debug) /* cpdebug prints the same info */
return; return;
fprintf(cp_err, "%s ", name); fprintf(cp_err, "%s ", name);
for (wl = wlist; wl; wl = wl->wl_next) for (wl = wlist; wl; wl = wl->wl_next)
@ -142,8 +142,9 @@ nloop:
c = '\n'; c = '\n';
if (c == ESCAPE) if (c == ESCAPE)
c = '['; c = '[';
} else
} else {
c = input(cp_inp_cur); c = input(cp_inp_cur);
}
gotchar: gotchar:
if ((c != EOF) && (c != ESCAPE)) if ((c != EOF) && (c != ESCAPE))
@ -189,9 +190,8 @@ gotchar:
switch (c) { switch (c) {
case ' ': case ' ':
case '\t': case '\t':
if (i > 0) {
if (i > 0)
newword; newword;
}
break; break;
case '\n': case '\n':
@ -208,10 +208,8 @@ gotchar:
&& (i < NEW_BSIZE_SP - 1)) { && (i < NEW_BSIZE_SP - 1)) {
if ((c == '\n') || (c == EOF) || (c == ESCAPE)) if ((c == '\n') || (c == EOF) || (c == ESCAPE))
goto gotchar; goto gotchar;
else {
buf[i++] = (char) quote(c); buf[i++] = (char) quote(c);
linebuf[j++] = (char) c; linebuf[j++] = (char) c;
}
} }
linebuf[j++] = '\''; linebuf[j++] = '\'';
break; break;
@ -224,7 +222,7 @@ gotchar:
&& (i < NEW_BSIZE_SP - 2)) { && (i < NEW_BSIZE_SP - 2)) {
if ((c == '\n') || (c == EOF) || (c == ESCAPE)) if ((c == '\n') || (c == EOF) || (c == ESCAPE))
goto gotchar; goto gotchar;
else if (c == '\\') {
if (c == '\\') {
linebuf[j++] = (char) c; linebuf[j++] = (char) c;
c = (string ? *string++ : input(cp_inp_cur)); c = (string ? *string++ : input(cp_inp_cur));
buf[i++] = (char) quote(c); buf[i++] = (char) quote(c);
@ -264,8 +262,9 @@ gotchar:
#endif #endif
wlist = cw = NULL; wlist = cw = NULL;
goto nloop; goto nloop;
} else /* EOF during a source */
{
}
/* EOF during a source */
if (cp_interactive) { if (cp_interactive) {
fputs("quit\n", stdout); fputs("quit\n", stdout);
cp_doquit(); cp_doquit();
@ -275,7 +274,6 @@ gotchar:
wl_free(wlist); wl_free(wlist);
return NULL; return NULL;
}
case ESCAPE: case ESCAPE:
if (cp_interactive && !cp_nocc) { if (cp_interactive && !cp_nocc) {
fputs("\b\b \b\b\r", cp_out); fputs("\b\b \b\b\r", cp_out);
@ -294,7 +292,7 @@ gotchar:
} }
goto ldefault; goto ldefault;
case ',': case ',':
if (paren < 1 && i > 0) {
if ((paren < 1) && (i > 0)) {
newword; newword;
break; break;
} }
@ -306,7 +304,7 @@ gotchar:
} }
goto ldefault; goto ldefault;
case '&': /* va: $&name is one word */ case '&': /* va: $&name is one word */
if (i==1 && buf[i-1]=='$' && c=='&') {
if ((i == 1) && (buf[i-1] == '$') && (c == '&')) {
buf[i++] = (char) c; buf[i++] = (char) c;
break; break;
} }
@ -314,7 +312,7 @@ gotchar:
case '<': case '<':
case '>': /* va: <=, >= are unbreakable words */ case '>': /* va: <=, >= are unbreakable words */
if(string) if(string)
if (i==0 && (*string=='=')) {
if ((i == 0) && (*string == '=')) {
buf[i++] = (char) c; buf[i++] = (char) c;
break; break;
} }
@ -324,17 +322,13 @@ gotchar:
* here * here
*/ */
ldefault: ldefault:
if ((cp_chars[c] & CPC_BRL) && (i > 0)) {
if ((c != '<') || (buf[i - 1] != '$')) {
if ((cp_chars[c] & CPC_BRL) && (i > 0))
if ((c != '<') || (buf[i - 1] != '$'))
newword; newword;
}
}
buf[i++] = (char) c; buf[i++] = (char) c;
if (cp_chars[c] & CPC_BRR) {
if ((c != '<') || (i < 2) || (buf[i - 2] != '$')) {
if (cp_chars[c] & CPC_BRR)
if ((c != '<') || (i < 2) || (buf[i - 2] != '$'))
newword; newword;
}
}
} }
} }
done: done:

Loading…
Cancel
Save