Annotation of 43BSD/contrib/B/src/bed/tabl.c, revision 1.1

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
        !             2: 
        !             3: /* 
        !             4:  * $Header: tabl.c,v 2.4 85/08/22 16:08:42 timo Exp $
        !             5:  */
        !             6: 
        !             7: /*
        !             8:  * B editor -- Grammar table.
        !             9:  */
        !            10: 
        !            11: #include "b.h"
        !            12: #include "node.h"
        !            13: #include "gram.h"
        !            14: #include "tabl.h"
        !            15: 
        !            16: 
        !            17: /*
        !            18:  * ***** DISCLAIMER *****
        !            19:  *
        !            20:  * This file is a mess.  There should really be a separate program (like Yacc)
        !            21:  * to compile a grammar into tables.  But for the time being . . .
        !            22:  */
        !            23: 
        !            24: 
        !            25: /*
        !            26:  * Values returned by function symbol(n).
        !            27:  * They are used directly as index in the grammar table.
        !            28:  * The NAMES of the #defined constants are of no importance outside this file.
        !            29:  */
        !            30: 
        !            31: #define Put    1
        !            32: #define Insert 2
        !            33: #define Remove 3
        !            34: #define Choose 4
        !            35: #define Draw   5
        !            36: #define Set_random     6
        !            37: #define Delete 7
        !            38: #define Check  8
        !            39: #define Share  9
        !            40: 
        !            41: #define Write  10
        !            42: #define Read   11
        !            43: #define Read_raw       12
        !            44: 
        !            45: #define If     13
        !            46: #define While  14
        !            47: #define For    15
        !            48: 
        !            49: #define Select 16
        !            50: 
        !            51: #define Quit   18
        !            52: #define Return 19
        !            53: #define Report 20
        !            54: #define Succeed        21
        !            55: #define Fail   22
        !            56: 
        !            57: #define How_to 23
        !            58: #define Yield  24
        !            59: #define Test   25
        !            60: #define Suite  26
        !            61: #define Refinement     27
        !            62: 
        !            63: #define Compound       28
        !            64: #define Collateral     29
        !            65: #define Tag    30
        !            66: #define Number 31
        !            67: #define Selection      32
        !            68: #define Behead 33
        !            69: #define Curtail        34
        !            70: 
        !            71: #define And    35
        !            72: #define Or     36
        !            73: #define Not    37
        !            74: #define Some_in        38
        !            75: #define Each_in        39
        !            76: #define No_in  40
        !            77: #define Some_parsing   41
        !            78: #define Each_parsing   42
        !            79: #define No_parsing     43
        !            80: 
        !            81: #define Comment        44
        !            82: #define Keyword        45
        !            83: 
        !            84: #define L_t_dis        46
        !            85: #define List_body      47
        !            86: #define Tab_body       48
        !            87: #define Tab_entry      49
        !            88: 
        !            89: #define E_number       50
        !            90: #define Com_target     51
        !            91: #define Col_target     52
        !            92: #define Sel_expr       53
        !            93: #define Text1  54
        !            94: #define Text2  55
        !            95: #define Grouped        56
        !            96: #define Blocked        57
        !            97: #define Operators      58
        !            98: 
        !            99: #define Else_kw        59
        !           100: #define Kw_plus        60
        !           101: #define E_plus 61
        !           102: #define Conversion     62
        !           103: #define T1     63
        !           104: #define T1_plus        64
        !           105: #define T2     65
        !           106: #define T2_plus        66
        !           107: #define Cmt_cmd        67
        !           108: 
        !           109: #define F_kw_plus      69
        !           110: #define F_e_plus       70
        !           111: #define Plus_sign      71
        !           112: #define Minus_sign     72
        !           113: 
        !           114: #define Long_comp      73
        !           115: #define Short_comp     74
        !           116: #define Cmt_comp       75
        !           117: 
        !           118: #define Long_unit      76
        !           119: #define Short_unit     77
        !           120: #define Cmt_head       78
        !           121: 
        !           122: #define Ref_join       79
        !           123: 
        !           124: #define And_kw 80
        !           125: #define Or_kw  81
        !           126: 
        !           127: #define E_part 82
        !           128: 
        !           129: #define Unit_edit      83
        !           130: #define Target_edit    84
        !           131: #define Imm_cmd        85
        !           132: #define Raw    86
        !           133: #define Raw_input      87
        !           134: #define Edit_unit      88
        !           135: #define Edit_target    89
        !           136: #define Colon  90
        !           137: #define Equals 91
        !           138: #define Test_suite     92
        !           139: #define Expression     93
        !           140: 
        !           141: /*
        !           142:  * The last three, `Suggestion', `Optional' and `Hole',
        !           143:  * with values 97, 98 and 99, are defined in "gram.h".
        !           144:  */
        !           145: 
        !           146: 
        !           147: /*
        !           148:  * Symbol values used for lexical elements.
        !           149:  * Cross-reference: "lexi.c", table `chclass'.
        !           150:  */
        !           151: 
        !           152: #define LEXICAL 100
        !           153: 
        !           154: #define IDENT (LEXICAL+0)
        !           155: #define KEYWORD (LEXICAL+1)
        !           156: #define NUMBER (LEXICAL+2)
        !           157: #define COMMENT (LEXICAL+3)
        !           158: #define TEXT1 (LEXICAL+4)
        !           159: #define TEXT2 (LEXICAL+5)
        !           160: #define OPERATORS (LEXICAL+6)
        !           161: #define RAWINPUT (LEXICAL+7)
        !           162: #define SUGGESTION (LEXICAL+8)
        !           163: 
        !           164: 
        !           165: /*
        !           166:  * Classes used in table initialization.
        !           167:  */
        !           168: 
        !           169: Hidden classelem Asugg_body[] = {SUGGESTION, 0};
        !           170:        Hidden struct classinfo sugg_body[] = {Asugg_body};
        !           171: 
        !           172: #define TARGET Tag, Com_target, Selection, Behead, Curtail
        !           173: #define PRIMARY \
        !           174:        Sel_expr, Tag, E_number, Number, Compound, L_t_dis, Text1, Text2
        !           175: #define EXPR Blocked, Grouped, Operators, PRIMARY
        !           176: 
        !           177: Hidden classelem Atag_body[] = {IDENT, 0};
        !           178:        Hidden struct classinfo tag_body[] = {Atag_body};
        !           179: Hidden classelem Anum_body[] = {NUMBER, 0};
        !           180:        Hidden struct classinfo num_body[] = {Anum_body};
        !           181: Hidden classelem Acom_body[] = {COMMENT, 0};
        !           182:        Hidden struct classinfo com_body[] = {Acom_body};
        !           183: Hidden classelem Akw_body[] = {KEYWORD, 0};
        !           184:        Hidden struct classinfo kw_body[] = {Akw_body};
        !           185: Hidden classelem At1_body[] = {TEXT1, 0};
        !           186:        Hidden struct classinfo t1_body[] = {At1_body};
        !           187: Hidden classelem At2_body[] = {TEXT2, 0};
        !           188:        Hidden struct classinfo t2_body[] = {At2_body};
        !           189: Hidden classelem Aops_body[] = {OPERATORS, 0};
        !           190:        Hidden struct classinfo ops_body[] = {Aops_body};
        !           191: Hidden classelem Araw_body[] = {RAWINPUT, 0};
        !           192:        Hidden struct classinfo raw_body[] = {Araw_body};
        !           193: Hidden classelem Araw_input[] = {Optional, Raw, 0};
        !           194:        Hidden struct classinfo raw_input[] = {Araw_input};
        !           195: 
        !           196: Hidden classelem Aid_or_kw[] = {Tag, Keyword, 0};
        !           197:        Hidden struct classinfo id_or_kw[] = {Aid_or_kw};
        !           198: Hidden classelem Anumber[] = {Number, 0};
        !           199:        Hidden struct classinfo number[] = {Anumber};
        !           200: Hidden classelem Asign[] = {Optional, Plus_sign, Minus_sign, 0};
        !           201:        Hidden struct classinfo sign[] = {Asign};
        !           202: 
        !           203: Hidden classelem Ao_c_expr[] = {Optional, Collateral, EXPR, 0};
        !           204:        Hidden struct classinfo o_c_expr[] = {Ao_c_expr};
        !           205: 
        !           206: #define Ac_expr (Ao_c_expr+1)
        !           207:        Hidden struct classinfo c_expr[] = {Ac_expr};
        !           208: #define Aexpr (Ao_c_expr+2)
        !           209:        Hidden struct classinfo expr[] = {Aexpr};
        !           210: #define Aprimary (Ao_c_expr+5)
        !           211:        Hidden struct classinfo primary[] = {Aprimary};
        !           212: 
        !           213: Hidden classelem Ablock[] = {Operators, PRIMARY, 0};
        !           214:        Hidden struct classinfo block[] = {Ablock};
        !           215: Hidden classelem Agroup[] = {Blocked, Operators, PRIMARY, 0};
        !           216:        Hidden struct classinfo group[] = {Agroup};
        !           217: 
        !           218: #define Ar_expr Agroup
        !           219:        Hidden struct classinfo r_expr[] = {Ar_expr};
        !           220: 
        !           221: Hidden classelem Al_t_body[] = {Optional, List_body, PRIMARY, Blocked, 
        !           222:        Grouped, Operators, Tab_body, Tab_entry, 0};
        !           223:        Hidden struct classinfo l_t_body[] = {Al_t_body};
        !           224: Hidden classelem Alist_body[] = {List_body, EXPR, 0};
        !           225:        Hidden struct classinfo list_body[] = {Alist_body};
        !           226: Hidden classelem Atab_body[] = {Tab_body, Tab_entry, 0};
        !           227:        Hidden struct classinfo tab_body[] = {Atab_body};
        !           228: Hidden classelem Atab_entry[] = {Tab_entry, 0};
        !           229:        Hidden struct classinfo tab_entry[] = {Atab_entry};
        !           230: 
        !           231: Hidden classelem Ac_target[] = {Col_target, TARGET, 0};
        !           232:        Hidden struct classinfo c_target[] = {Ac_target};
        !           233: 
        !           234: #define Atarget (Ac_target+1)
        !           235:        Hidden struct classinfo target[] = {Atarget};
        !           236: 
        !           237: #define SOME_ETC \
        !           238:        Not, Some_in, Each_in, No_in, Some_parsing, Each_parsing, No_parsing
        !           239: 
        !           240: Hidden classelem Ae_test[] = {Else_kw, SOME_ETC, And, Or, EXPR, 0};
        !           241:        Hidden struct classinfo e_test[] = {Ae_test};
        !           242: 
        !           243: #define Atest (Ae_test+1)
        !           244:        Hidden struct classinfo test[] = {Atest};
        !           245: #define At_test Aexpr
        !           246:        Hidden struct classinfo t_test[] = {At_test};
        !           247: Hidden classelem Ar_test[] = {SOME_ETC, EXPR, 0};
        !           248:        Hidden struct classinfo r_test[] = {Ar_test};
        !           249: Hidden classelem Aand_test[] = {SOME_ETC, And, EXPR, 0};
        !           250:        Hidden struct classinfo and_test[] = {Aand_test};
        !           251: Hidden classelem Aor_test[] = {SOME_ETC, Or, EXPR, 0};
        !           252:        Hidden struct classinfo or_test[] = {Aor_test};
        !           253: Hidden classelem Ac_test[] = {Collateral, SOME_ETC, And, Or, EXPR, 0};
        !           254:        Hidden struct classinfo c_test[] = {Ac_test};
        !           255:        /*
        !           256:         * This means that a compound expression may in fact
        !           257:         * contain a `collateral test', e.g. (a AND b, c AND d).
        !           258:         * Of course, this is illegal in B, but I couldn't
        !           259:         * solve the ambiguity of `(' where a test is expected
        !           260:         * otherwise (this may start a parenthesized test, or
        !           261:         * a compound expression; the latter may be followed
        !           262:         * by more expression fragments, the first may not).
        !           263:         */
        !           264: 
        !           265: Hidden classelem Acomment[] = {Comment, 0};
        !           266:        Hidden struct classinfo comment[] = {Acomment};
        !           267: Hidden classelem Ao_comment[] = {Optional, Comment, 0};
        !           268:        Hidden struct classinfo o_comment[] = {Ao_comment};
        !           269:        
        !           270: #define HEAD How_to, Yield, Test
        !           271: #define BODY HEAD, Cmt_head, Long_unit, Short_unit
        !           272: 
        !           273: /* The order here determines which are suggested first and is subject
        !           274:    to constant change! */
        !           275: #define SIMPLE_CMD SC1, SC2, SC3
        !           276: #define SC1 Share, Quit, Return, Write, Read, Read_raw, Put, Delete
        !           277: #define SC2 Report, Fail, Succeed, Insert, Remove, Check
        !           278: #define SC3 Choose, Draw, Set_random, Suggestion, Keyword, Kw_plus
        !           279: 
        !           280: #define CONTROL_CMD If, While, For
        !           281: #define COMP_CMD Short_comp, Long_comp, Cmt_comp, Select
        !           282: #define CMD If, For, COMP_CMD, SIMPLE_CMD, While
        !           283: /* #define SHORTCMD SIMPLE_CMD, Cmt_cmd */
        !           284: #define SHORTCMD If, For, SIMPLE_CMD, While, Short_comp, Cmt_comp, Cmt_cmd
        !           285: 
        !           286: Hidden classelem Ac_head[] = {Cmt_head, HEAD, 0};
        !           287:        Hidden struct classinfo c_head[] = {Ac_head};
        !           288: #define Ahead (Ac_head+1)
        !           289:        Hidden struct classinfo head[] = {Ahead};
        !           290: 
        !           291: Hidden classelem Aunit[] = {Optional, EXPR, BODY, Ref_join, 0};
        !           292:        Hidden struct classinfo unit[] = {Aunit};
        !           293: Hidden classelem Ao_refinements[] = {Optional, Refinement, 0};
        !           294:        Hidden struct classinfo o_refinements[] = {Ao_refinements};
        !           295: #define Arefinements (Ao_refinements+1)
        !           296:        Hidden struct classinfo refinements[] = {Arefinements};
        !           297: Hidden classelem Arefpred[] = {BODY, 0};
        !           298:        Hidden struct classinfo refpred[] = {Arefpred};
        !           299: 
        !           300: Hidden classelem Af_cmd[] = {Keyword, F_kw_plus, 0};
        !           301:        Hidden struct classinfo f_cmd[] = {Af_cmd};
        !           302: #define Af_formula Aexpr /*****/
        !           303:        Hidden struct classinfo f_formula[] = {Af_formula};
        !           304: 
        !           305: Hidden classelem Ao_suite[] = {Optional, Suite, 0};
        !           306:        Hidden struct classinfo o_suite[] = {Ao_suite};
        !           307: Hidden classelem At_suite[] = {Test_suite, 0};
        !           308:        Hidden struct classinfo t_suite[] = {At_suite};
        !           309: Hidden classelem Ao_t_suite[] = {Optional, Test_suite, 0};
        !           310:        Hidden struct classinfo o_t_suite[] = {Ao_t_suite};
        !           311: 
        !           312: Hidden classelem Acmd[] = {Comment, CMD, Cmt_cmd, 0};
        !           313:        Hidden struct classinfo cmd[] = {Acmd};
        !           314: Hidden classelem Ashortcmd[] = {SHORTCMD, 0};
        !           315:        Hidden struct classinfo shortcmd[] = {Ashortcmd};
        !           316: Hidden classelem Ao_cmdsuite[] = {Optional, SHORTCMD, Suite, 0};
        !           317:        Hidden struct classinfo o_cmdsuite[] = {Ao_cmdsuite};
        !           318: Hidden classelem Asuite[] = {Suite, 0};
        !           319:        Hidden struct classinfo suite[] = {Asuite};
        !           320: Hidden classelem Asimple_cmd[] = {SIMPLE_CMD, 0};
        !           321:        Hidden struct classinfo simple_cmd[] = {Asimple_cmd};
        !           322: 
        !           323: Hidden classelem Ac_ifforwhile[] = {CONTROL_CMD, Cmt_comp, 0};
        !           324:        Hidden struct classinfo c_ifforwhile[] = {Ac_ifforwhile};
        !           325: Hidden classelem Aifforwhile[] = {CONTROL_CMD, 0};
        !           326:        Hidden struct classinfo ifforwhile[] = {Aifforwhile};
        !           327: 
        !           328: Hidden classelem Akeyword[] = {Keyword, 0};
        !           329:        Hidden struct classinfo keyword[] = {Akeyword};
        !           330: Hidden classelem Akw_next[] = {Collateral, EXPR, Keyword, E_plus, Kw_plus, 0};
        !           331:        Hidden struct classinfo kw_next[] = {Akw_next};
        !           332: Hidden classelem Ae_next[] = {Keyword, Kw_plus, 0};
        !           333:        Hidden struct classinfo e_next[] = {Ae_next};
        !           334: 
        !           335: Hidden classelem Af_kw_next[] = {Tag, Keyword, F_kw_plus, F_e_plus, 0};
        !           336:        Hidden struct classinfo f_kw_next[] = {Af_kw_next};
        !           337: Hidden classelem Af_e_next[] = {Keyword, F_kw_plus, 0};
        !           338:        Hidden struct classinfo f_e_next[] = {Af_e_next};
        !           339: Hidden classelem Atag[] = {Tag, 0};
        !           340:        Hidden struct classinfo tag[] = {Atag};
        !           341: 
        !           342: Hidden classelem Atext1[] = {Optional, T1, Conversion, T1_plus, 0};
        !           343:        Hidden struct classinfo text1[] = {Atext1};
        !           344: Hidden classelem At1_conv[] = {T1, Conversion, 0};
        !           345:        Hidden struct classinfo t1_conv[] = {At1_conv};
        !           346: Hidden classelem At1_next[] = {T1, Conversion, T1_plus, 0};
        !           347:        Hidden struct classinfo t1_next[] = {At1_next};
        !           348: 
        !           349: Hidden classelem Atext2[] = {Optional, T2, Conversion, T2_plus, 0};
        !           350:        Hidden struct classinfo text2[] = {Atext2};
        !           351: Hidden classelem At2_conv[] = {T2, Conversion, 0};
        !           352:        Hidden struct classinfo t2_conv[] = {At2_conv};
        !           353: Hidden classelem At2_next[] = {T2, Conversion, T2_plus, 0};
        !           354:        Hidden struct classinfo t2_next[] = {At2_next};
        !           355: 
        !           356: Hidden classelem Aand[] = {And_kw, 0};
        !           357:        Hidden struct classinfo and[] = {Aand};
        !           358: Hidden classelem Aor[] = {Or_kw, 0};
        !           359:        Hidden struct classinfo or[] = {Aor};
        !           360: 
        !           361: Hidden classelem Ae_part[] = {E_part, 0};
        !           362:        Hidden struct classinfo e_part[] = {Ae_part};
        !           363: 
        !           364: Hidden classelem Aunit_edit[] = {Optional, BODY, Ref_join, 0};
        !           365:        Hidden struct classinfo unit_edit[] = {Aunit_edit};
        !           366: Hidden classelem Atarget_edit[] = {Optional, EXPR, 0};
        !           367:        Hidden struct classinfo target_edit[] = {Atarget_edit};
        !           368: Hidden classelem Aimm_cmd[] = {Optional, Comment, HEAD, CMD, Cmt_cmd, Cmt_head,
        !           369:        Edit_unit, Edit_target, 0};
        !           370:        Hidden struct classinfo imm_cmd[] = {Aimm_cmd};
        !           371: 
        !           372: Hidden classelem Aed_unit[] = {Optional, Tag, Keyword, Colon, 0};
        !           373:        Hidden struct classinfo ed_unit[] = {Aed_unit};
        !           374: Hidden classelem Aed_target[] = {Optional, Tag, Equals, 0};
        !           375:        Hidden struct classinfo ed_target[] = {Aed_target};
        !           376: 
        !           377: 
        !           378: /*
        !           379:  * WARNING: The entries in this table must correspond one by one
        !           380:  * to the symbols defined earlier.  This is checked dynamically
        !           381:  * by the initialization procedure (syserr "table order").
        !           382:  */
        !           383: 
        !           384: #define XX(name) name, "name"
        !           385: 
        !           386: Hidden struct table b_grammar[] = {
        !           387:        {XX(Rootsymbol), {0}, {unit}}, /* Start symbol of the grammar,
        !           388:                        may be overridden by setroot("Blabla") call. */
        !           389:        {XX(Put), {"PUT ", " IN "}, {c_expr, c_target}},
        !           390:        {XX(Insert), {"INSERT ", " IN "}, {c_expr, target}},
        !           391:        {XX(Remove), {"REMOVE ", " FROM "}, {c_expr, target}},
        !           392:        {XX(Choose), {"CHOOSE ", " FROM "}, {c_expr, expr}},
        !           393:        {XX(Draw), {"DRAW "}, {target}},
        !           394:        {XX(Set_random), {"SET'RANDOM "}, {c_expr}},
        !           395:        {XX(Delete), {"DELETE "}, {c_target}},
        !           396:        {XX(Check), {"CHECK "}, {test}},
        !           397:        {XX(Share), {"SHARE "}, {c_target}},
        !           398: 
        !           399:        {XX(Write), {"WRITE "}, {c_expr}},
        !           400:        {XX(Read), {"READ ", " EG "}, {c_target, c_expr}},
        !           401:        {XX(Read_raw), {"READ ", " RAW"}, {target}},
        !           402: 
        !           403:        {XX(If), {"IF ", ": "}, {test}},
        !           404:        {XX(While), {"WHILE ", ": "}, {test}},
        !           405:        {XX(For), {"FOR ", " IN ", ": "}, {c_target, expr}},
        !           406: 
        !           407:        {XX(Select), {"SELECT: ", "\t", "\b"}, {o_comment, t_suite}},
        !           408:        {0}, /* Test_suite moved to 92 */
        !           409: 
        !           410:        {XX(Quit), {"QUIT"}, {0}},
        !           411:        {XX(Return), {"RETURN "}, {c_expr}},
        !           412:        {XX(Report), {"REPORT "}, {test}},
        !           413:        {XX(Succeed), {"SUCCEED"}, {0}},
        !           414:        {XX(Fail), {"FAIL"}, {0}},
        !           415: 
        !           416:        {XX(How_to), {"HOW'TO ", ": "}, {f_cmd}},
        !           417:        {XX(Yield), {"YIELD ", ": "}, {f_formula}},
        !           418:        {XX(Test), {"TEST ", ": "}, {f_formula}},
        !           419: 
        !           420:        {XX(Suite), {"\n"}, {cmd, o_suite}},
        !           421:        {XX(Refinement), {"\n", ": ", "\t", "\b"},
        !           422:                {id_or_kw, o_comment, o_cmdsuite, o_refinements}},
        !           423: 
        !           424:        {XX(Compound), {"(", ")"}, {c_test}},
        !           425:        {XX(Collateral), {0, ", "}, {expr, c_expr}},
        !           426:        {XX(Tag), {0}, {tag_body}},
        !           427:        {XX(Number), {0}, {num_body}},
        !           428:        {XX(Selection), {0, "[", "]"}, {target, c_expr}},
        !           429:        {XX(Behead), {0, "@"}, {target, r_expr}},
        !           430:        {XX(Curtail), {0, "|"}, {target, r_expr}},
        !           431: 
        !           432:        {XX(And), {0, " "}, {t_test, and}},
        !           433:        {XX(Or), {0, " "}, {t_test, or}},
        !           434:        {XX(Not), {"NOT "}, {r_test}},
        !           435:        {XX(Some_in), {"SOME ", " IN ", " HAS "}, {c_target, expr, r_test}},
        !           436:        {XX(Each_in), {"EACH ", " IN ", " HAS "}, {c_target, expr, r_test}},
        !           437:        {XX(No_in), {"NO ", " IN ", " HAS "}, {c_target, expr, r_test}},
        !           438:        {XX(Some_parsing), {"SOME ", " PARSING ", " HAS "},
        !           439:                {c_target, expr, r_test}},
        !           440:        {XX(Each_parsing), {"EACH ", " PARSING ", " HAS "},
        !           441:                {c_target, expr, r_test}},
        !           442:        {XX(No_parsing), {"NO ", " PARSING ", " HAS "}, {c_target, expr, r_test}},
        !           443: 
        !           444:        {XX(Comment), {0}, {com_body}},
        !           445:        {XX(Keyword), {0}, {kw_body}},
        !           446: 
        !           447:        {XX(L_t_dis), {"{", "}"}, {l_t_body}},
        !           448:        {XX(List_body), {0, "; "}, {expr, list_body}},
        !           449:        {XX(Tab_body), {0, "; "}, {tab_entry, tab_body}},
        !           450:        {XX(Tab_entry), {"[", "]: "}, {c_expr, expr}},
        !           451:        {XX(E_number), {0}, {number, e_part}},
        !           452: 
        !           453:        {XX(Com_target), {"(", ")"}, {c_target}},
        !           454:        {XX(Col_target), {0, ", "}, {target, c_target}},
        !           455:        {XX(Sel_expr), {0, "[", "]"}, {primary, c_expr}},
        !           456: 
        !           457:        {XX(Text1), {"'", "'"}, {text1}},
        !           458:        {XX(Text2), {"\"", "\""}, {text2}},
        !           459:        {XX(Grouped), {0, " "}, {group, expr}},
        !           460:        {XX(Blocked), {0}, {block, group}},
        !           461:        {XX(Operators), {0}, {ops_body}},
        !           462:        {XX(Else_kw), {"ELSE"}, {0}},
        !           463:        {XX(Kw_plus), {0, " "}, {keyword, kw_next}},
        !           464:        {XX(E_plus), {0, " "}, {c_expr, e_next}},
        !           465:        {XX(Conversion), {"`", "`"}, {o_c_expr}},
        !           466:        {XX(T1), {0}, {t1_body}},
        !           467:        {XX(T1_plus), {0}, {t1_conv, t1_next}},
        !           468:        {XX(T2), {0}, {t2_body}},
        !           469:        {XX(T2_plus), {0}, {t2_conv, t2_next}},
        !           470:        {XX(Cmt_cmd), {0, " "}, {simple_cmd, comment}},
        !           471:        {0},
        !           472:        {XX(F_kw_plus), {0, " "}, {keyword, f_kw_next}},
        !           473:        {XX(F_e_plus), {0, " "}, {tag, f_e_next}},
        !           474:        {XX(Plus_sign), {"+"}, {0}},
        !           475:        {XX(Minus_sign), {"-"}, {0}},
        !           476: 
        !           477:        {XX(Long_comp), {0, "\t", "\b"}, {c_ifforwhile, suite}},
        !           478:        {XX(Short_comp), {0, "\t", "\b"}, {ifforwhile, shortcmd}},
        !           479:        {XX(Cmt_comp), {0}, {ifforwhile, comment}},
        !           480: 
        !           481:        {XX(Long_unit), {0, "\t", "\b"}, {c_head, suite}},
        !           482:        {XX(Short_unit), {0, "\t", "\b"}, {head, shortcmd}},
        !           483:        {XX(Cmt_head), {0}, {head, comment}},
        !           484: 
        !           485:        {XX(Ref_join), {0}, {refpred, refinements}},
        !           486: 
        !           487:        {XX(And_kw), {"AND "}, {and_test}},
        !           488:        {XX(Or_kw), {"OR "}, {or_test}},
        !           489: 
        !           490:        {XX(E_part), {"E"}, {sign, number}},
        !           491: 
        !           492:        /* Alternate root symbols */
        !           493: 
        !           494:        {XX(Unit_edit), {0}, {unit_edit}},
        !           495:        {XX(Target_edit), {0}, {target_edit}},
        !           496:        {XX(Imm_cmd), {0}, {imm_cmd}},
        !           497:        {XX(Raw), {0}, {raw_body}},
        !           498:        {XX(Raw_input), {0}, {raw_input}},
        !           499:        {XX(Edit_unit), {":"}, {ed_unit}},
        !           500:        {XX(Edit_target), {"="}, {ed_target}},
        !           501:        {XX(Colon), {":"}, {0}},
        !           502:        {XX(Equals), {"="}, {0}},
        !           503:        {XX(Test_suite), {"\n", ": ", "\t", "\b"},
        !           504:                {e_test, o_comment, o_cmdsuite, o_t_suite}},
        !           505:        {XX(Expression), {0}, {c_expr}},
        !           506: 
        !           507:        /* Spare(s); change Optional and Hole in "gram.h" if you run out. */
        !           508: 
        !           509:        {0}, {0}, {0},
        !           510: 
        !           511:        /* Next three entries must be the last entries of the table. */
        !           512:        /* (See comments in "gram.c", initgram().) */
        !           513: 
        !           514:        {XX(Suggestion), {0}, {sugg_body}},
        !           515:        {XX(Optional), {0}, {0}},
        !           516:        {XX(Hole), {"?"}, {0}},
        !           517: };
        !           518: 
        !           519: Visible struct table *table= b_grammar;

unix.superglobalmegacorp.com

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