Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199512_2.adf » !Regulars » Regulars/StarInfo/Seery/grammar/phrase
Regulars/StarInfo/Seery/grammar/phrase
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornUser_199512_2.adf » !Regulars |
Filename: | Regulars/StarInfo/Seery/grammar/phrase |
Read OK: | ✔ |
File size: | 0DDA bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
// grammar for 'fittapes' tape fitting system // for use with 'gb' syntax analyser generator // **************************************************************************** // declare tokens begin end video e480 e360 e240 e180 e120 e60 categories programme from starts ends category precedes follows leftBrace rightBrace comma semiColon identifier stringLiteral constant endOfStream %% // define C language interface #include "fittapes.h" #include "parser.h" void yylex() { if (c_lexeme == NULL) { c_lexeme = lexList_head; } else { c_lexeme = c_lexeme->next; } } int yylextype() { return ((int)c_lexeme->lexeme_type); } int yyeof() { return (c_lexeme->lexeme_type == endOfStream); } void yyerror(char *string, ...) { va_list argp; va_start(argp,string); printf("[error]: [line %d of %s] ",c_lexeme->source_line, c_lexeme->source_file); vprintf(string,argp); va_end(argp); } void yywarning(char *string, ...) { va_list argp; va_start(argp,string); printf("[warning]: [line %d of %s] ",c_lexeme->source_line, c_lexeme->source_file); vprintf(string,argp); va_end(argp); } void yyinsert(int number) { Lexeme lex; lex = malloc(sizeof(lexeme_instance)); lex->lexeme_type = number; switch (number) { case identifier: lex->lexeme_value.identifierValue = "fittapes"; break; case stringLiteral: lex->lexeme_value.stringLiteralValue = "fittapes"; break; case constant: lex->lexeme_value.constantValue = 1; break; } lex->source_file = c_lexeme->source_file; lex->source_line = c_lexeme->source_line; lex->next = c_lexeme; lex->prev = c_lexeme->prev; if (c_lexeme->prev != NULL) { c_lexeme->prev->next = lex; } c_lexeme->prev = lex; c_lexeme = lex; } %% // define grammar itself // distinguished symbol is first listed input = begin declarations end semiColon . declarations = video_declaration declarations | categories_declaration declarations | programme_declaration declarations | . video_declaration = video video_type video_ids semiColon . video_type = e480 <remember_video_type> | e360 <remember_video_type> | e240 <remember_video_type> | e180 <remember_video_type> | e120 <remember_video_type> | e60 <remember_video_type> . video_ids = identifier <new_video> video_id_list . video_id_list = comma identifier <new_video> video_id_list | . categories_declaration = categories leftBrace category_ids rightBrace semiColon . category_ids = identifier <new_category> category_id_list . category_id_list = comma identifier <new_category> category_id_list | . programme_declaration = programme <new_programme> leftBrace programme_declarators rightBrace <end_programme> stringLiteral <attach_name> semiColon . programme_declarators = from_declaration programme_declarators | start_declaration programme_declarators | end_declaration programme_declarators | category_declaration programme_declarators | precedes_declaration programme_declarators | follows_declaration programme_declarators | . from_declaration = from identifier <attach_source> semiColon . start_declaration = starts constant <starts_hr> constant <starts_mins> constant <starts_secs> semiColon . end_declaration = ends constant <ends_hr> constant <ends_mins> constant <ends_secs> semiColon . category_declaration = category identifier <attach_category> semiColon . precedes_declaration = precedes stringLiteral <attach_precedes> semiColon . follows_declaration = follows stringLiteral <attach_follows> semiColon . %%
00000000 2f 2f 20 67 72 61 6d 6d 61 72 20 66 6f 72 20 27 |// grammar for '| 00000010 66 69 74 74 61 70 65 73 27 20 74 61 70 65 20 66 |fittapes' tape f| 00000020 69 74 74 69 6e 67 20 73 79 73 74 65 6d 0a 0a 2f |itting system../| 00000030 2f 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 27 |/ for use with '| 00000040 67 62 27 20 73 79 6e 74 61 78 20 61 6e 61 6c 79 |gb' syntax analy| 00000050 73 65 72 20 67 65 6e 65 72 61 74 6f 72 0a 0a 2f |ser generator../| 00000060 2f 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |/ **************| 00000070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 000000a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 0a |**************..| 000000b0 2f 2f 20 64 65 63 6c 61 72 65 20 74 6f 6b 65 6e |// declare token| 000000c0 73 0a 0a 62 65 67 69 6e 0a 65 6e 64 0a 76 69 64 |s..begin.end.vid| 000000d0 65 6f 0a 65 34 38 30 0a 65 33 36 30 0a 65 32 34 |eo.e480.e360.e24| 000000e0 30 0a 65 31 38 30 0a 65 31 32 30 0a 65 36 30 0a |0.e180.e120.e60.| 000000f0 63 61 74 65 67 6f 72 69 65 73 0a 70 72 6f 67 72 |categories.progr| 00000100 61 6d 6d 65 0a 66 72 6f 6d 0a 73 74 61 72 74 73 |amme.from.starts| 00000110 0a 65 6e 64 73 0a 63 61 74 65 67 6f 72 79 0a 70 |.ends.category.p| 00000120 72 65 63 65 64 65 73 0a 66 6f 6c 6c 6f 77 73 0a |recedes.follows.| 00000130 6c 65 66 74 42 72 61 63 65 0a 72 69 67 68 74 42 |leftBrace.rightB| 00000140 72 61 63 65 0a 63 6f 6d 6d 61 0a 73 65 6d 69 43 |race.comma.semiC| 00000150 6f 6c 6f 6e 0a 69 64 65 6e 74 69 66 69 65 72 0a |olon.identifier.| 00000160 73 74 72 69 6e 67 4c 69 74 65 72 61 6c 0a 63 6f |stringLiteral.co| 00000170 6e 73 74 61 6e 74 0a 65 6e 64 4f 66 53 74 72 65 |nstant.endOfStre| 00000180 61 6d 0a 0a 25 25 0a 0a 2f 2f 20 64 65 66 69 6e |am..%%..// defin| 00000190 65 20 43 20 6c 61 6e 67 75 61 67 65 20 69 6e 74 |e C language int| 000001a0 65 72 66 61 63 65 0a 0a 23 69 6e 63 6c 75 64 65 |erface..#include| 000001b0 20 22 66 69 74 74 61 70 65 73 2e 68 22 0a 23 69 | "fittapes.h".#i| 000001c0 6e 63 6c 75 64 65 20 22 70 61 72 73 65 72 2e 68 |nclude "parser.h| 000001d0 22 0a 0a 76 6f 69 64 20 79 79 6c 65 78 28 29 0a |"..void yylex().| 000001e0 7b 0a 20 20 69 66 20 28 63 5f 6c 65 78 65 6d 65 |{. if (c_lexeme| 000001f0 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 7b 0a 20 20 | == NULL). {. | 00000200 20 20 63 5f 6c 65 78 65 6d 65 20 3d 20 6c 65 78 | c_lexeme = lex| 00000210 4c 69 73 74 5f 68 65 61 64 3b 0a 20 20 7d 0a 20 |List_head;. }. | 00000220 20 65 6c 73 65 0a 20 20 7b 0a 20 20 20 20 63 5f | else. {. c_| 00000230 6c 65 78 65 6d 65 20 3d 20 63 5f 6c 65 78 65 6d |lexeme = c_lexem| 00000240 65 2d 3e 6e 65 78 74 3b 0a 20 20 7d 0a 7d 0a 0a |e->next;. }.}..| 00000250 69 6e 74 20 79 79 6c 65 78 74 79 70 65 28 29 0a |int yylextype().| 00000260 7b 0a 20 20 72 65 74 75 72 6e 20 28 28 69 6e 74 |{. return ((int| 00000270 29 63 5f 6c 65 78 65 6d 65 2d 3e 6c 65 78 65 6d |)c_lexeme->lexem| 00000280 65 5f 74 79 70 65 29 3b 0a 7d 0a 0a 69 6e 74 20 |e_type);.}..int | 00000290 79 79 65 6f 66 28 29 0a 7b 0a 20 20 72 65 74 75 |yyeof().{. retu| 000002a0 72 6e 20 28 63 5f 6c 65 78 65 6d 65 2d 3e 6c 65 |rn (c_lexeme->le| 000002b0 78 65 6d 65 5f 74 79 70 65 20 3d 3d 20 65 6e 64 |xeme_type == end| 000002c0 4f 66 53 74 72 65 61 6d 29 3b 0a 7d 0a 0a 76 6f |OfStream);.}..vo| 000002d0 69 64 20 79 79 65 72 72 6f 72 28 63 68 61 72 20 |id yyerror(char | 000002e0 2a 73 74 72 69 6e 67 2c 20 2e 2e 2e 29 0a 7b 0a |*string, ...).{.| 000002f0 20 20 76 61 5f 6c 69 73 74 20 61 72 67 70 3b 0a | va_list argp;.| 00000300 0a 20 20 76 61 5f 73 74 61 72 74 28 61 72 67 70 |. va_start(argp| 00000310 2c 73 74 72 69 6e 67 29 3b 0a 0a 20 20 70 72 69 |,string);.. pri| 00000320 6e 74 66 28 22 5b 65 72 72 6f 72 5d 3a 20 5b 6c |ntf("[error]: [l| 00000330 69 6e 65 20 25 64 20 6f 66 20 25 73 5d 20 22 2c |ine %d of %s] ",| 00000340 63 5f 6c 65 78 65 6d 65 2d 3e 73 6f 75 72 63 65 |c_lexeme->source| 00000350 5f 6c 69 6e 65 2c 0a 20 20 09 20 63 5f 6c 65 78 |_line,. . c_lex| 00000360 65 6d 65 2d 3e 73 6f 75 72 63 65 5f 66 69 6c 65 |eme->source_file| 00000370 29 3b 0a 20 20 76 70 72 69 6e 74 66 28 73 74 72 |);. vprintf(str| 00000380 69 6e 67 2c 61 72 67 70 29 3b 0a 0a 20 20 76 61 |ing,argp);.. va| 00000390 5f 65 6e 64 28 61 72 67 70 29 3b 0a 7d 0a 0a 76 |_end(argp);.}..v| 000003a0 6f 69 64 20 79 79 77 61 72 6e 69 6e 67 28 63 68 |oid yywarning(ch| 000003b0 61 72 20 2a 73 74 72 69 6e 67 2c 20 2e 2e 2e 29 |ar *string, ...)| 000003c0 0a 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 72 67 |.{. va_list arg| 000003d0 70 3b 0a 0a 20 20 76 61 5f 73 74 61 72 74 28 61 |p;.. va_start(a| 000003e0 72 67 70 2c 73 74 72 69 6e 67 29 3b 0a 0a 20 20 |rgp,string);.. | 000003f0 70 72 69 6e 74 66 28 22 5b 77 61 72 6e 69 6e 67 |printf("[warning| 00000400 5d 3a 20 5b 6c 69 6e 65 20 25 64 20 6f 66 20 25 |]: [line %d of %| 00000410 73 5d 20 22 2c 63 5f 6c 65 78 65 6d 65 2d 3e 73 |s] ",c_lexeme->s| 00000420 6f 75 72 63 65 5f 6c 69 6e 65 2c 0a 20 20 09 20 |ource_line,. . | 00000430 63 5f 6c 65 78 65 6d 65 2d 3e 73 6f 75 72 63 65 |c_lexeme->source| 00000440 5f 66 69 6c 65 29 3b 0a 20 20 76 70 72 69 6e 74 |_file);. vprint| 00000450 66 28 73 74 72 69 6e 67 2c 61 72 67 70 29 3b 0a |f(string,argp);.| 00000460 0a 20 20 76 61 5f 65 6e 64 28 61 72 67 70 29 3b |. va_end(argp);| 00000470 0a 7d 0a 0a 76 6f 69 64 20 79 79 69 6e 73 65 72 |.}..void yyinser| 00000480 74 28 69 6e 74 20 6e 75 6d 62 65 72 29 0a 7b 0a |t(int number).{.| 00000490 20 20 4c 65 78 65 6d 65 20 6c 65 78 3b 0a 0a 20 | Lexeme lex;.. | 000004a0 20 6c 65 78 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 | lex = malloc(si| 000004b0 7a 65 6f 66 28 6c 65 78 65 6d 65 5f 69 6e 73 74 |zeof(lexeme_inst| 000004c0 61 6e 63 65 29 29 3b 0a 20 20 6c 65 78 2d 3e 6c |ance));. lex->l| 000004d0 65 78 65 6d 65 5f 74 79 70 65 20 3d 20 6e 75 6d |exeme_type = num| 000004e0 62 65 72 3b 0a 0a 20 20 73 77 69 74 63 68 20 28 |ber;.. switch (| 000004f0 6e 75 6d 62 65 72 29 0a 20 20 7b 0a 20 20 20 20 |number). {. | 00000500 63 61 73 65 20 69 64 65 6e 74 69 66 69 65 72 3a |case identifier:| 00000510 0a 20 20 20 20 20 20 6c 65 78 2d 3e 6c 65 78 65 |. lex->lexe| 00000520 6d 65 5f 76 61 6c 75 65 2e 69 64 65 6e 74 69 66 |me_value.identif| 00000530 69 65 72 56 61 6c 75 65 20 3d 20 22 66 69 74 74 |ierValue = "fitt| 00000540 61 70 65 73 22 3b 0a 20 20 20 20 20 20 62 72 65 |apes";. bre| 00000550 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 73 74 72 |ak;. case str| 00000560 69 6e 67 4c 69 74 65 72 61 6c 3a 0a 20 20 20 20 |ingLiteral:. | 00000570 20 20 6c 65 78 2d 3e 6c 65 78 65 6d 65 5f 76 61 | lex->lexeme_va| 00000580 6c 75 65 2e 73 74 72 69 6e 67 4c 69 74 65 72 61 |lue.stringLitera| 00000590 6c 56 61 6c 75 65 20 3d 20 22 66 69 74 74 61 70 |lValue = "fittap| 000005a0 65 73 22 3b 0a 20 20 20 20 20 20 62 72 65 61 6b |es";. break| 000005b0 3b 0a 20 20 20 20 63 61 73 65 20 63 6f 6e 73 74 |;. case const| 000005c0 61 6e 74 3a 0a 20 20 20 20 20 20 6c 65 78 2d 3e |ant:. lex->| 000005d0 6c 65 78 65 6d 65 5f 76 61 6c 75 65 2e 63 6f 6e |lexeme_value.con| 000005e0 73 74 61 6e 74 56 61 6c 75 65 20 3d 20 31 3b 0a |stantValue = 1;.| 000005f0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d | break;. }| 00000600 0a 0a 20 20 6c 65 78 2d 3e 73 6f 75 72 63 65 5f |.. lex->source_| 00000610 66 69 6c 65 20 3d 20 63 5f 6c 65 78 65 6d 65 2d |file = c_lexeme-| 00000620 3e 73 6f 75 72 63 65 5f 66 69 6c 65 3b 0a 20 20 |>source_file;. | 00000630 6c 65 78 2d 3e 73 6f 75 72 63 65 5f 6c 69 6e 65 |lex->source_line| 00000640 20 3d 20 63 5f 6c 65 78 65 6d 65 2d 3e 73 6f 75 | = c_lexeme->sou| 00000650 72 63 65 5f 6c 69 6e 65 3b 0a 20 20 6c 65 78 2d |rce_line;. lex-| 00000660 3e 6e 65 78 74 20 3d 20 63 5f 6c 65 78 65 6d 65 |>next = c_lexeme| 00000670 3b 0a 20 20 6c 65 78 2d 3e 70 72 65 76 20 3d 20 |;. lex->prev = | 00000680 63 5f 6c 65 78 65 6d 65 2d 3e 70 72 65 76 3b 0a |c_lexeme->prev;.| 00000690 20 20 69 66 20 28 63 5f 6c 65 78 65 6d 65 2d 3e | if (c_lexeme->| 000006a0 70 72 65 76 20 21 3d 20 4e 55 4c 4c 29 0a 20 20 |prev != NULL). | 000006b0 7b 0a 20 20 20 20 63 5f 6c 65 78 65 6d 65 2d 3e |{. c_lexeme->| 000006c0 70 72 65 76 2d 3e 6e 65 78 74 20 3d 20 6c 65 78 |prev->next = lex| 000006d0 3b 0a 20 20 7d 0a 20 20 63 5f 6c 65 78 65 6d 65 |;. }. c_lexeme| 000006e0 2d 3e 70 72 65 76 20 3d 20 6c 65 78 3b 0a 20 20 |->prev = lex;. | 000006f0 63 5f 6c 65 78 65 6d 65 20 3d 20 6c 65 78 3b 0a |c_lexeme = lex;.| 00000700 7d 0a 0a 25 25 0a 0a 2f 2f 20 64 65 66 69 6e 65 |}..%%..// define| 00000710 20 67 72 61 6d 6d 61 72 20 69 74 73 65 6c 66 0a | grammar itself.| 00000720 0a 2f 2f 20 64 69 73 74 69 6e 67 75 69 73 68 65 |.// distinguishe| 00000730 64 20 73 79 6d 62 6f 6c 20 69 73 20 66 69 72 73 |d symbol is firs| 00000740 74 20 6c 69 73 74 65 64 0a 0a 69 6e 70 75 74 20 |t listed..input | 00000750 3d 20 62 65 67 69 6e 20 64 65 63 6c 61 72 61 74 |= begin declarat| 00000760 69 6f 6e 73 20 65 6e 64 20 73 65 6d 69 43 6f 6c |ions end semiCol| 00000770 6f 6e 20 2e 0a 0a 64 65 63 6c 61 72 61 74 69 6f |on ...declaratio| 00000780 6e 73 20 3d 20 76 69 64 65 6f 5f 64 65 63 6c 61 |ns = video_decla| 00000790 72 61 74 69 6f 6e 20 64 65 63 6c 61 72 61 74 69 |ration declarati| 000007a0 6f 6e 73 0a 7c 20 63 61 74 65 67 6f 72 69 65 73 |ons.| categories| 000007b0 5f 64 65 63 6c 61 72 61 74 69 6f 6e 20 64 65 63 |_declaration dec| 000007c0 6c 61 72 61 74 69 6f 6e 73 0a 7c 20 70 72 6f 67 |larations.| prog| 000007d0 72 61 6d 6d 65 5f 64 65 63 6c 61 72 61 74 69 6f |ramme_declaratio| 000007e0 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 0a 7c |n declarations.|| 000007f0 20 2e 0a 0a 76 69 64 65 6f 5f 64 65 63 6c 61 72 | ...video_declar| 00000800 61 74 69 6f 6e 20 3d 20 76 69 64 65 6f 20 76 69 |ation = video vi| 00000810 64 65 6f 5f 74 79 70 65 20 76 69 64 65 6f 5f 69 |deo_type video_i| 00000820 64 73 20 73 65 6d 69 43 6f 6c 6f 6e 20 2e 0a 0a |ds semiColon ...| 00000830 76 69 64 65 6f 5f 74 79 70 65 20 3d 20 65 34 38 |video_type = e48| 00000840 30 20 3c 72 65 6d 65 6d 62 65 72 5f 76 69 64 65 |0 <remember_vide| 00000850 6f 5f 74 79 70 65 3e 0a 7c 20 65 33 36 30 20 3c |o_type>.| e360 <| 00000860 72 65 6d 65 6d 62 65 72 5f 76 69 64 65 6f 5f 74 |remember_video_t| 00000870 79 70 65 3e 0a 7c 20 65 32 34 30 20 3c 72 65 6d |ype>.| e240 <rem| 00000880 65 6d 62 65 72 5f 76 69 64 65 6f 5f 74 79 70 65 |ember_video_type| 00000890 3e 0a 7c 20 65 31 38 30 20 3c 72 65 6d 65 6d 62 |>.| e180 <rememb| 000008a0 65 72 5f 76 69 64 65 6f 5f 74 79 70 65 3e 0a 7c |er_video_type>.|| 000008b0 20 65 31 32 30 20 3c 72 65 6d 65 6d 62 65 72 5f | e120 <remember_| 000008c0 76 69 64 65 6f 5f 74 79 70 65 3e 0a 7c 20 65 36 |video_type>.| e6| 000008d0 30 20 3c 72 65 6d 65 6d 62 65 72 5f 76 69 64 65 |0 <remember_vide| 000008e0 6f 5f 74 79 70 65 3e 20 2e 0a 0a 76 69 64 65 6f |o_type> ...video| 000008f0 5f 69 64 73 20 3d 20 69 64 65 6e 74 69 66 69 65 |_ids = identifie| 00000900 72 20 3c 6e 65 77 5f 76 69 64 65 6f 3e 20 76 69 |r <new_video> vi| 00000910 64 65 6f 5f 69 64 5f 6c 69 73 74 20 2e 0a 0a 76 |deo_id_list ...v| 00000920 69 64 65 6f 5f 69 64 5f 6c 69 73 74 20 3d 20 63 |ideo_id_list = c| 00000930 6f 6d 6d 61 20 69 64 65 6e 74 69 66 69 65 72 20 |omma identifier | 00000940 3c 6e 65 77 5f 76 69 64 65 6f 3e 20 76 69 64 65 |<new_video> vide| 00000950 6f 5f 69 64 5f 6c 69 73 74 0a 7c 20 2e 0a 0a 63 |o_id_list.| ...c| 00000960 61 74 65 67 6f 72 69 65 73 5f 64 65 63 6c 61 72 |ategories_declar| 00000970 61 74 69 6f 6e 20 3d 20 63 61 74 65 67 6f 72 69 |ation = categori| 00000980 65 73 20 6c 65 66 74 42 72 61 63 65 20 63 61 74 |es leftBrace cat| 00000990 65 67 6f 72 79 5f 69 64 73 20 72 69 67 68 74 42 |egory_ids rightB| 000009a0 72 61 63 65 20 73 65 6d 69 43 6f 6c 6f 6e 20 2e |race semiColon .| 000009b0 0a 0a 63 61 74 65 67 6f 72 79 5f 69 64 73 20 3d |..category_ids =| 000009c0 20 69 64 65 6e 74 69 66 69 65 72 20 3c 6e 65 77 | identifier <new| 000009d0 5f 63 61 74 65 67 6f 72 79 3e 20 63 61 74 65 67 |_category> categ| 000009e0 6f 72 79 5f 69 64 5f 6c 69 73 74 20 2e 0a 0a 63 |ory_id_list ...c| 000009f0 61 74 65 67 6f 72 79 5f 69 64 5f 6c 69 73 74 20 |ategory_id_list | 00000a00 3d 20 63 6f 6d 6d 61 20 69 64 65 6e 74 69 66 69 |= comma identifi| 00000a10 65 72 20 3c 6e 65 77 5f 63 61 74 65 67 6f 72 79 |er <new_category| 00000a20 3e 20 63 61 74 65 67 6f 72 79 5f 69 64 5f 6c 69 |> category_id_li| 00000a30 73 74 0a 7c 20 2e 0a 0a 70 72 6f 67 72 61 6d 6d |st.| ...programm| 00000a40 65 5f 64 65 63 6c 61 72 61 74 69 6f 6e 20 3d 20 |e_declaration = | 00000a50 70 72 6f 67 72 61 6d 6d 65 20 3c 6e 65 77 5f 70 |programme <new_p| 00000a60 72 6f 67 72 61 6d 6d 65 3e 20 6c 65 66 74 42 72 |rogramme> leftBr| 00000a70 61 63 65 20 70 72 6f 67 72 61 6d 6d 65 5f 64 65 |ace programme_de| 00000a80 63 6c 61 72 61 74 6f 72 73 20 72 69 67 68 74 42 |clarators rightB| 00000a90 72 61 63 65 20 3c 65 6e 64 5f 70 72 6f 67 72 61 |race <end_progra| 00000aa0 6d 6d 65 3e 20 73 74 72 69 6e 67 4c 69 74 65 72 |mme> stringLiter| 00000ab0 61 6c 20 3c 61 74 74 61 63 68 5f 6e 61 6d 65 3e |al <attach_name>| 00000ac0 20 73 65 6d 69 43 6f 6c 6f 6e 20 2e 0a 0a 70 72 | semiColon ...pr| 00000ad0 6f 67 72 61 6d 6d 65 5f 64 65 63 6c 61 72 61 74 |ogramme_declarat| 00000ae0 6f 72 73 20 3d 20 66 72 6f 6d 5f 64 65 63 6c 61 |ors = from_decla| 00000af0 72 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 |ration programme| 00000b00 5f 64 65 63 6c 61 72 61 74 6f 72 73 0a 7c 20 73 |_declarators.| s| 00000b10 74 61 72 74 5f 64 65 63 6c 61 72 61 74 69 6f 6e |tart_declaration| 00000b20 20 70 72 6f 67 72 61 6d 6d 65 5f 64 65 63 6c 61 | programme_decla| 00000b30 72 61 74 6f 72 73 0a 7c 20 65 6e 64 5f 64 65 63 |rators.| end_dec| 00000b40 6c 61 72 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d |laration program| 00000b50 6d 65 5f 64 65 63 6c 61 72 61 74 6f 72 73 0a 7c |me_declarators.|| 00000b60 20 63 61 74 65 67 6f 72 79 5f 64 65 63 6c 61 72 | category_declar| 00000b70 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 5f |ation programme_| 00000b80 64 65 63 6c 61 72 61 74 6f 72 73 0a 7c 20 70 72 |declarators.| pr| 00000b90 65 63 65 64 65 73 5f 64 65 63 6c 61 72 61 74 69 |ecedes_declarati| 00000ba0 6f 6e 20 70 72 6f 67 72 61 6d 6d 65 5f 64 65 63 |on programme_dec| 00000bb0 6c 61 72 61 74 6f 72 73 0a 7c 20 66 6f 6c 6c 6f |larators.| follo| 00000bc0 77 73 5f 64 65 63 6c 61 72 61 74 69 6f 6e 20 70 |ws_declaration p| 00000bd0 72 6f 67 72 61 6d 6d 65 5f 64 65 63 6c 61 72 61 |rogramme_declara| 00000be0 74 6f 72 73 0a 7c 20 2e 0a 0a 66 72 6f 6d 5f 64 |tors.| ...from_d| 00000bf0 65 63 6c 61 72 61 74 69 6f 6e 20 3d 20 66 72 6f |eclaration = fro| 00000c00 6d 20 69 64 65 6e 74 69 66 69 65 72 20 3c 61 74 |m identifier <at| 00000c10 74 61 63 68 5f 73 6f 75 72 63 65 3e 20 73 65 6d |tach_source> sem| 00000c20 69 43 6f 6c 6f 6e 20 2e 0a 0a 73 74 61 72 74 5f |iColon ...start_| 00000c30 64 65 63 6c 61 72 61 74 69 6f 6e 20 3d 20 73 74 |declaration = st| 00000c40 61 72 74 73 20 63 6f 6e 73 74 61 6e 74 20 3c 73 |arts constant <s| 00000c50 74 61 72 74 73 5f 68 72 3e 20 63 6f 6e 73 74 61 |tarts_hr> consta| 00000c60 6e 74 20 3c 73 74 61 72 74 73 5f 6d 69 6e 73 3e |nt <starts_mins>| 00000c70 20 63 6f 6e 73 74 61 6e 74 20 3c 73 74 61 72 74 | constant <start| 00000c80 73 5f 73 65 63 73 3e 20 73 65 6d 69 43 6f 6c 6f |s_secs> semiColo| 00000c90 6e 20 2e 0a 0a 65 6e 64 5f 64 65 63 6c 61 72 61 |n ...end_declara| 00000ca0 74 69 6f 6e 20 3d 20 65 6e 64 73 20 63 6f 6e 73 |tion = ends cons| 00000cb0 74 61 6e 74 20 3c 65 6e 64 73 5f 68 72 3e 20 63 |tant <ends_hr> c| 00000cc0 6f 6e 73 74 61 6e 74 20 3c 65 6e 64 73 5f 6d 69 |onstant <ends_mi| 00000cd0 6e 73 3e 20 63 6f 6e 73 74 61 6e 74 20 3c 65 6e |ns> constant <en| 00000ce0 64 73 5f 73 65 63 73 3e 20 73 65 6d 69 43 6f 6c |ds_secs> semiCol| 00000cf0 6f 6e 20 2e 0a 0a 63 61 74 65 67 6f 72 79 5f 64 |on ...category_d| 00000d00 65 63 6c 61 72 61 74 69 6f 6e 20 3d 20 63 61 74 |eclaration = cat| 00000d10 65 67 6f 72 79 20 69 64 65 6e 74 69 66 69 65 72 |egory identifier| 00000d20 20 3c 61 74 74 61 63 68 5f 63 61 74 65 67 6f 72 | <attach_categor| 00000d30 79 3e 20 73 65 6d 69 43 6f 6c 6f 6e 20 2e 0a 0a |y> semiColon ...| 00000d40 70 72 65 63 65 64 65 73 5f 64 65 63 6c 61 72 61 |precedes_declara| 00000d50 74 69 6f 6e 20 3d 20 70 72 65 63 65 64 65 73 20 |tion = precedes | 00000d60 73 74 72 69 6e 67 4c 69 74 65 72 61 6c 20 3c 61 |stringLiteral <a| 00000d70 74 74 61 63 68 5f 70 72 65 63 65 64 65 73 3e 20 |ttach_precedes> | 00000d80 73 65 6d 69 43 6f 6c 6f 6e 20 2e 0a 0a 66 6f 6c |semiColon ...fol| 00000d90 6c 6f 77 73 5f 64 65 63 6c 61 72 61 74 69 6f 6e |lows_declaration| 00000da0 20 3d 20 66 6f 6c 6c 6f 77 73 20 73 74 72 69 6e | = follows strin| 00000db0 67 4c 69 74 65 72 61 6c 20 3c 61 74 74 61 63 68 |gLiteral <attach| 00000dc0 5f 66 6f 6c 6c 6f 77 73 3e 20 73 65 6d 69 43 6f |_follows> semiCo| 00000dd0 6c 6f 6e 20 2e 0a 0a 25 25 0a |lon ...%%.| 00000dda