Annotation of researchv8dc/cmd/wwb/gram.l, revision 1.1.1.1

1.1       root        1: %{
                      2: /* NOTICE-NOT TO BE DISCLOSED OUTSIDE BELL SYS EXCEPT UNDER WRITTEN AGRMT */
                      3: /* Writer's Workbench version 2.0, January 1981 */
                      4: #include <ctype.h>
                      5: int catch = 1;
                      6: int ct = 0;
                      7: int ret=0;
                      8: int linect = 0;
                      9: char name[50];
                     10: int i;
                     11: char *p;
                     12: FILE *fopen(), *cat;
                     13: %}
                     14: %%
                     15: verb"\t"to\n   search();
                     16: art"\t"a\n     cons();
                     17: art"\t"an\n    vowel();
                     18: ^"."[0-9]+     linect = atoi(&yytext[1]);
                     19: ^".F ".*       {
                     20:                p = name;
                     21:                for(i=3;i<yyleng;i++)
                     22:                        *p++ = yytext[i];
                     23:                }
                     24: .       |
                     25: \n      ;
                     26: %%
                     27: cons(){
                     28:        int c;
                     29:        int f;
                     30:        char *w1;
                     31:        char w[100];
                     32:        w1 = w;
                     33:        while((c=input()) != '\t')*w1++ = c;
                     34:        if(strncmp("conj",w,4) == 0)return(ret);
                     35:        if(strncmp("prep",w,4) == 0)return(ret);
                     36:        if(strncmp("be",w,2) == 0)return(ret);
                     37:        if(strncmp("verb",w,4) == 0)return(ret);
                     38:        w1 = w;
                     39:        while((f=input()) == ' ');
                     40:        if(!isalpha(f))return(ret);
                     41:        if(isupper(f))return(ret);
                     42:        if(f == 'a'||f == 'e'||f =='i'||f =='o'||f == 'u'|| f == 'h'){
                     43:                *w1++ = f;
                     44:                while((c=input()) != '\n'){
                     45:                        if(!isalpha(c))break;
                     46:                        *w1++ = c;
                     47:                }
                     48:                if(w1 < &w[2])return(ret);
                     49:                *w1 = '\0';
                     50:                if(f == 'h'){
                     51:                        if(hexc(w)== 0)return(ret);
                     52:                } else if(f == 'u'){
                     53:                        if(uexc(w) == 1)return(ret);
                     54:                } else if(f == 'e'){
                     55:                        if(w[1] == 'u')return(ret);
                     56:                } else if(f == 'o'){
                     57:                        if(strncmp("one",w,3) == 0)return(ret);
                     58:                        if(strncmp("once",w,4) == 0)return(ret);
                     59:                }
                     60:                ret = 1;
                     61:                if(++ct == 1)printf("Possible grammatical errors:\n");
                     62:                printf("\t\"a %s\" should be \"an %s\"",w,w);
                     63:                printf(" after line %d file %s\n",linect,name);
                     64:        }
                     65:        return(ret);
                     66: }
                     67: vowel(){
                     68:        int c,f;
                     69:        char *w1;
                     70:        char w[100];
                     71:        w1 = w;
                     72:        while((c=input()) != '\t')*w1++ = c;
                     73:        if(strncmp("conj",w,4) == 0)return(ret);
                     74:        if(strncmp("prep",w,4) == 0)return(ret);
                     75:        if(strncmp("be",w,4) == 0)return(ret);
                     76:        if(strncmp("verb",w,4) == 0)return(ret);
                     77:        w1 = w;
                     78:        while((f=input()) == ' ');
                     79:        if(!isalpha(f))return(ret);
                     80:        if(isupper(f))return(ret);
                     81:        if(f != 'a' && f != 'i' ){
                     82:                *w1++ = f;
                     83:                while((c=input()) != '\n'){
                     84:                        if(!isalpha(c))break;
                     85:                        *w1++ = c;
                     86:                }
                     87:                if(w1 < &w[2])return(ret);
                     88:                *w1 = '\0';
                     89:                if(f == 'h'){
                     90:                        if(hexc(w))return(ret);
                     91:                }
                     92:                else if(f == 'u'){
                     93:                        if(uexc(w) == 0)return(ret);
                     94:                } else if(f == 'e'){
                     95:                        if(w[1] != 'u')return(ret);
                     96:                } else if(f == 'o' ){
                     97:                        if( strncmp("one",w,3) != 0)return(ret);
                     98:                        if(strncmp("once",w,4) != 0)return(ret);
                     99:                }
                    100:                ret = 1;
                    101:                if(++ct == 1)printf("Possible grammatical errors:\n");
                    102:                printf("\t\"an %s\" should be \"a %s\"",w,w);
                    103:                printf(" after line %d file %s\n",linect,name);
                    104:        }
                    105:        return(ret);
                    106: }
                    107: search()
                    108: {
                    109:        char *sv;
                    110:        int c;
                    111:        char *w1, *p1, *p2;
                    112:        char words[100];
                    113:        char part1[10],part2[10];
                    114:        int f;
                    115: #ifdef SPCATCH
                    116:        if(catch != 2){
                    117:                if((cat=fopen(SPCATCH,"a"))==NULL) catch=0;
                    118:                else catch = 2;
                    119:        }
                    120: #else
                    121:        catch=0;
                    122: #endif
                    123:        w1 = words;
                    124:        f = 0;
                    125: more:
                    126:        for(p1 = part1; (c= input())!= '\t';)
                    127:                *p1++ = c;
                    128:        while((c=input())!='\n')
                    129:                *w1++ = c;
                    130:        *w1++ = ' ';
                    131:        if(strncmp(part1,"adv",3) != 0)
                    132:                return(ret);
                    133: 
                    134:        while(1){
                    135:                for(p2=part2;(c=input())!='\t';)
                    136:                        *p2++ = c;
                    137:                if(strncmp(part2,"verb",4) != 0)
                    138:                        break;
                    139: 
                    140:                sv = w1;
                    141:                while((c=input())!='\n')
                    142:                        *w1++ = c;
                    143:                if(strncmp(sv,"to",2) == 0 && w1 == sv+2)break;
                    144:                *w1++ = ' ';
                    145:                f = 1;
                    146:        }
                    147:        if(f == 0)return(ret);
                    148:        *w1 = '\0';
                    149:        if(++ct==1)printf("Possible grammatical errors:\n\n");
                    150:        printf("\tsplit infinitive: \"to %s\"",words);
                    151:        printf(" after line %d file %s\n",linect,name);
                    152:        if(catch == 2){
                    153:                fprintf(cat,"%s\n",words);
                    154:        }
                    155:        ret=1;
                    156:        return(ret);
                    157: }
                    158: hexc(w)
                    159: char *w;
                    160: {
                    161:        if(strncmp(w,"heir",4) == 0)return(1);
                    162:        if(strncmp(w,"herb",4) == 0)return(1);
                    163:        if(strncmp(w,"hour",4) == 0)return(1);
                    164:        if(strncmp(w,"honest",6) == 0)return(1);
                    165:        if(strncmp(w,"hombre",6) == 0)return(1);
                    166:        if(strncmp(w,"honor",4) == 0)return(1);
                    167:        return(0);
                    168: }
                    169: uexc(w)
                    170: char *w;
                    171: {
                    172:        int c1, c2;
                    173:        if(strncmp(w,"uni",3) == 0){
                    174:                if(*(w+3) != 'm' && *(w+3) != 'n')return(1);
                    175:                else return(0);
                    176:        }
                    177:        c1 = *(w+1);
                    178:        if(c1 == 'b' || c1 == 'k')return(1);
                    179:        c2 = *(w+2);
                    180:        if(c1 == 'r' || c1 == 's'){
                    181:                if(c2== 'a' || c2 == 'e' || c2 == 'i' || c2 == 'o' || c2 == 'u')
                    182:                        return(1);
                    183:                else return(0);
                    184:        }
                    185:        if(strncmp("unanim",w,6) == 0)return(1);
                    186:        if(strncmp("unary",w,5) == 0)return(1);
                    187:        if(c1 == 't' && c2 != 't')return(1);
                    188:        return(0);
                    189: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.