# # Definitions # rl xml_digit / (0x30..0x39) / rl base_char / 0x41..0x5A | 0x61..0x7A / rl char / 0x9 | 0xA | 0xD | 0x20..0x7f / rl letter / base_char / rl name_char / letter | digit | '.' | '-' | '_' | ':' | 0xb7 / rl name / (letter | '_' | ':') name_char* / # # Reference definitions. These appear in the # top level and also in strings. # rl entity_ref_pat / '&' name ';' / rl char_ref_pat / '&#' [0-9]+ ';' | '&0x' [0-9a-fA-F]+ ';' / # # Single quotes. # lex token sq_close /'\''/ # References in single quotes token sq_entity_ref /entity_ref_pat/ token sq_char_ref /char_ref_pat/ token sq_data / [^<&']+ / def sq_item [ sq_data ] | [ sq_entity_ref ] | [ sq_char_ref ] # The opening quote belongs to the tag region. def sq_string [ `' sq_item* sq_close ] end # # Double quotes. # lex token dq_close /'"'/ # References in double quotes token dq_entity_ref /entity_ref_pat/ token dq_char_ref /char_ref_pat/ token dq_data / [^<&"]+ / def dq_item [ dq_data ] | [ dq_entity_ref ] | [ dq_char_ref ] # The opening quote belongs to the tag region. def dq_string [ `" dq_item* dq_close ] end # # Tag elements. # lex literal `' `" `= `/ # Within this region whitespace is not significant. ignore xml_space / (0x20 | 0x9 | 0xD | 0xA)+ / # # Attributes # token attr_name / name / end literal `> # # Top Level # lex # # Comments # # Cannot contain '--' rl char_no_dash / char - '-' / token comment / '' / # Opening a tag. literal `< # # Character Data # token cdata / ' ']]>'/ token char_data / [^<&]+ / token entity_ref /entity_ref_pat/ token char_ref /char_ref_pat/ end def attribute_value [ sq_string ] | [ dq_string ] def attribute [ attr_name `= attribute_value ] def empty_tag [ `< attr_name attribute* `/ `> ] def close_tag [ `< `/ attr_name `> ] def open_tag [ `< attr_name attribute* `> ] def tag [open_tag content close_tag] def content_item [tag] | [empty_tag] | [char_data] | [entity_ref] | [char_ref] | [cdata] | [comment] def content [content_item*] def document [content] def start [document] parse S: start[stdin] for Switch:tag in S { if match Switch ["" SwitchContent:content ""] { print( 'SWITCH\n' ) for Text:tag in SwitchContent { if match Text ["" TextContent:content ""] { print( ' ' TextContent '\n' ) } } } } ##### IN ##### char lastnl = p; column = 0; line++; 1 1 token( RE_Char, '\0' ); 1 token( RE_Char, '\a' ); 1 token( RE_Char, '\b' ); 1 token( RE_Char, '\t' ); 1 token( RE_Char, '\n' ); 1 token( RE_Char, '\v' ); 1 token( RE_Char, '\f' ); 1 token( RE_Char, '\r' ); 1 updateCol(); 1 token( RE_Char, tokstart+1, tokend ); 1 token( RE_Dash, 0, 0 ); 1 token( RE_SqClose ); 1 scan_error() << "unterminated OR literal" << endl; 1 token( RE_Char, tokstart, tokend ); 15 16 17 18 19 20 21 1 token( TK_Literal, tokstart, tokend ); 1 token( RE_SqOpenNeg ); 166 1 token( '/'); 1 updateCol(); 1 token( TK_ColonEquals ); 1 token( TK_StartToState ); 1 token( TK_AllToState ); 1 token( TK_FinalToState ); 1 token( TK_NotStartToState ); 1 token( TK_NotFinalToState ); 1 token( TK_MiddleToState ); 1 token( TK_StartFromState ); 1 token( TK_AllFromState ); 1 token( TK_FinalFromState ); 1 token( TK_NotStartFromState ); 1 token( TK_NotFinalFromState ); 1 token( TK_MiddleFromState ); 1 token( TK_StartEOF ); 1 token( TK_AllEOF ); 1 token( TK_FinalEOF ); 1 token( TK_NotStartEOF ); 1 token( TK_NotFinalEOF ); 1 token( TK_MiddleEOF ); 1 token( TK_StartGblError ); 1 token( TK_AllGblError ); 1 token( TK_FinalGblError ); 1 token( TK_NotStartGblError ); 1 token( TK_NotFinalGblError ); 1 token( TK_MiddleGblError ); 1 token( TK_StartLocalError ); 1 token( TK_AllLocalError ); 1 token( TK_FinalLocalError ); 1 token( TK_NotStartLocalError ); 1 token( TK_NotFinalLocalError ); 1 token( TK_MiddleLocalError ); 1 token( TK_StartCond ); 1 token( TK_AllCond ); 1 token( TK_LeavingCond ); 1 token( TK_DotDot ); 1 token( TK_StarStar ); 1 token( TK_DashDash ); 1 token( TK_Arrow ); 1 token( TK_ColonGtGt ); 1 token( TK_LtColon ); 1 updateCol(); 1 1 token( *tokstart ); 0 token( TK_Word, tokstart, tokend ); 0 token( TK_UInt, tokstart, tokend ); 0 token( TK_Hex, tokstart, tokend ); 0 token( TK_Literal, tokstart, tokend ); 0 token( RE_SqOpen ); 166 0 token( TK_Middle ); 0 token( TK_ColonGt ); 0 updateCol(); 0 token( *tokstart ); token( TK_UInt, tokstart, tokend ); token( KW_When ); token( KW_Eof ); token( KW_Err ); token( KW_Lerr ); token( KW_To ); token( KW_From ); token( TK_Word, tokstart, tokend ); 1 litBuf.append( '\a' ); 1 litBuf.append( '\b' ); 1 litBuf.append( '\t' ); 1 litBuf.append( '\n' ); 1 litBuf.append( '\v' ); 1 litBuf.append( '\f' ); 1 litBuf.append( '\r' ); 1 litBuf.append( tokstart[1] ); 1 if ( litBuf.length > 0 ) { token( TK_LitPat, litBuf.data, litBuf.data+litBuf.length ); litBuf.clear(); } token( '"' ); 1 if ( litBuf.length > 0 ) { litBuf.append( '\n' ); token( TK_LitPat, litBuf.data, litBuf.data+litBuf.length ); litBuf.clear(); } token( '"' ); 1 if ( litBuf.length > 0 ) { token( TK_LitPat, litBuf.data, litBuf.data+litBuf.length ); litBuf.clear(); } token( '[' ); 10 1 litBuf.append( *tokstart ); 87 88 89 90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 1 token( '/' ); 168 1 token( '"' ); token( TK_LitPat, tokstart+1, tokend ); token( '"' ); 1 token( TK_Literal, tokstart, tokend ); 1 token( '"' ); litBuf.clear(); 203 1 token( '[' ); 10 1 token( ']' ); if ( top > 0 ) 1 updateCol(); 1 token( TK_ColonEquals ); 1 token( TK_DoubleArrow ); 1 token( TK_DoubleEquals ); 1 token( TK_NotEquals ); 1 token( TK_DoubleColon ); 1 token( TK_LessEquals ); 1 token( TK_GreaterEquals ); 1 token( TK_LeftArrow ); 1 token( TK_AmpAmp ); 1 token( TK_BarBar ); 1 token( *tokstart ); 1 updateCol(); 1 1 token( *tokstart ); 0 token( KW_Pri ); 0 token( KW_Print ); 0 token( TK_Word, tokstart, tokend ); 0 token( TK_Number, tokstart, tokend ); 0 updateCol(); 0 token( *tokstart ); token( KW_Lex ); token( KW_Action ); token( KW_AlphType ); token( KW_Commit ); token( KW_Undo ); token( KW_Final ); token( KW_Translate ); token( KW_Token ); token( KW_Literal ); token( KW_NonTerm ); token( KW_Uses ); token( KW_Parser ); token( KW_Include ); token( KW_Write ); token( KW_Nfa ); token( KW_Pda ); token( KW_Rl ); token( KW_Cfl ); token( KW_Ignore ); token( KW_End ); token( KW_Pattern ); token( KW_Construct ); token( KW_Red ); token( KW_TypeId ); token( KW_TypeDef ); token( KW_If ); token( KW_Init ); token( KW_Reject ); token( KW_While ); token( KW_Else ); token( KW_SubParser ); token( KW_Next ); token( KW_Match ); token( KW_For ); token( KW_Iter ); token( KW_Find ); token( KW_Root ); token( KW_PrintXML ); token( KW_Then ); token( KW_Do ); token( KW_Namespace ); token( KW_Scanner ); token( TK_Word, tokstart, tokend ); 0 144 0 140 0 139 0 28 81 1 2 158 157 0 156 141 3 155 138 3 137 142 143 163 164 148 153 162 149 145 152 150 147 146 151 165 161 3 96 3 97 3 112 3 98 3 116 3 134 3 124 3 114 3 130 3 100 3 128 3 120 3 113 3 107 3 121 3 129 3 95 3 103 3 127 3 135 3 126 3 109 3 104 3 106 3 115 3 110 159 160 3 132 3 111 3 117 3 122 3 131 3 136 3 125 3 133 3 102 3 101 3 119 3 118 3 99 3 105 3 123 3 108 154 17 16 14 15 13 12 4 5 6 10 8 11 7 9 71 70 0 69 27 3 24 79 75 25 80 49 37 43 61 55 31 50 38 44 62 56 32 64 65 66 63 73 74 29 78 67 51 39 45 68 57 33 77 53 41 47 59 35 48 36 42 60 54 30 52 40 46 58 34 82 76 26 72 3 19 3 20 3 23 3 21 3 22 3 18 94 0 92 91 93 90 83 84 88 86 89 85 87 10 166 168 203 10 -128 9 0 x 10 10 10 0 11 127 0 x -128 9 1 x 10 10 1 1 11 38 1 x 39 39 10 2 40 91 1 x 92 92 2 x 93 127 1 x -128 9 1 x 10 10 1 1 11 127 1 x -128 9 3 x 10 10 10 3 11 127 3 x -128 9 4 x 10 10 4 1 11 33 4 x 34 34 171 x 35 91 4 x 92 92 5 x 93 127 4 x -128 9 4 x 10 10 4 1 11 127 4 x -128 9 6 x 10 10 168 4 11 127 6 x -128 9 7 x 10 10 7 1 11 38 7 x 39 39 171 x 40 91 7 x 92 92 8 x 93 127 7 x -128 9 7 x 10 10 7 1 11 127 7 x -128 47 168 5 48 57 181 x 58 64 168 5 65 70 181 x 71 96 168 5 97 102 181 x 103 127 168 5 6 7 x -128 -1 10 8 0 0 10 9 1 8 10 8 9 9 11 x 10 10 10 10 11 12 10 8 13 13 11 x 14 31 10 8 32 32 11 x 33 33 12 x 34 34 10 11 35 35 13 12 36 37 10 8 38 38 14 x 39 39 15 12 40 43 10 13 44 44 10 8 45 45 10 13 46 46 10 8 47 47 10 14 48 57 16 x 58 58 17 x 59 59 10 8 60 60 18 x 61 61 19 x 62 62 20 x 63 64 10 8 65 90 21 15 91 91 10 16 92 92 10 8 93 93 10 17 94 94 10 8 95 95 21 15 96 96 10 8 97 97 22 x 98 98 21 15 99 99 33 x 100 100 45 x 101 101 46 x 102 102 50 x 103 104 21 15 105 105 55 x 106 107 21 15 108 108 68 x 109 109 75 x 110 110 79 x 111 111 21 15 112 112 95 x 113 113 21 15 114 114 112 x 115 115 119 x 116 116 132 x 117 117 152 x 118 118 21 15 119 119 157 x 120 122 21 15 123 123 10 8 124 124 164 x 125 125 10 8 126 126 165 12 127 127 10 8 -128 8 10 18 9 9 11 x 10 12 10 18 13 13 11 x 14 31 10 18 32 32 11 x 33 127 10 18 -128 60 10 19 61 61 10 20 62 127 10 19 -128 9 0 x 10 10 10 0 11 127 0 x -128 37 10 19 38 38 10 21 39 127 10 19 -128 9 1 x 10 10 1 1 11 38 1 x 39 39 10 2 40 91 1 x 92 92 2 x 93 127 1 x -128 47 10 22 48 57 16 x 58 127 10 22 -128 57 10 19 58 58 10 23 59 60 10 19 61 61 10 24 62 127 10 19 -128 44 10 19 45 45 10 25 46 60 10 19 61 61 10 26 62 127 10 19 -128 60 10 19 61 61 10 27 62 62 10 28 63 127 10 19 -128 60 10 19 61 61 10 29 62 127 10 19 -128 47 10 30 48 57 21 15 58 64 10 30 65 90 21 15 91 94 10 30 95 95 21 15 96 96 10 30 97 122 21 15 123 127 10 30 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 23 x 100 107 21 15 108 108 27 x 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 24 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 104 21 15 105 105 25 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 110 21 15 111 111 26 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 21 32 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 111 21 15 112 112 28 x 113 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 103 21 15 104 104 29 x 105 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 30 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 120 21 15 121 121 31 x 122 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 111 21 15 112 112 32 x 113 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 33 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 101 21 15 102 102 34 x 103 110 21 15 111 111 35 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 21 34 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 108 21 15 109 109 36 x 110 110 39 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 108 21 15 109 109 37 x 110 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 104 21 15 105 105 38 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 21 35 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 40 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 41 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 42 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 116 21 15 117 117 43 x 118 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 44 x 100 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 21 36 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 110 21 15 111 111 21 37 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 47 x 109 109 21 15 110 110 49 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 48 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 38 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 99 21 15 100 100 21 39 101 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 104 21 15 105 105 51 x 106 110 21 15 111 111 54 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 52 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 53 x 98 99 21 15 100 100 21 40 101 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 21 41 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 21 42 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 101 21 15 102 102 21 43 103 103 56 x 104 109 21 15 110 110 60 x 111 115 21 15 116 116 66 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 57 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 110 21 15 111 111 58 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 59 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 44 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 61 x 100 104 21 15 105 105 65 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 62 x 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 116 21 15 117 117 63 x 118 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 99 21 15 100 100 64 x 101 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 45 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 21 46 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 67 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 21 47 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 69 x 102 104 21 15 105 105 70 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 119 21 15 120 120 21 48 121 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 71 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 72 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 73 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 74 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 21 49 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 76 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 77 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 78 x 100 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 103 21 15 104 104 21 50 105 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 80 x 98 100 21 15 101 101 87 x 102 102 89 x 103 110 21 15 111 111 90 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 108 21 15 109 109 81 x 110 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 82 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 83 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 111 21 15 112 112 84 x 113 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 85 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 86 x 100 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 51 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 119 21 15 120 120 88 x 121 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 21 52 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 21 53 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 91 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 92 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 93 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 94 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 108 21 15 109 109 21 54 110 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 96 x 98 99 21 15 100 100 104 x 101 113 21 15 114 114 105 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 97 x 115 115 21 15 116 116 100 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 98 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 99 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 21 55 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 101 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 102 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 103 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 21 56 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 21 57 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 104 21 15 105 105 106 x 106 122 21 15 123 127 10 31 -128 47 10 58 48 57 21 15 58 64 10 58 65 90 21 15 91 94 10 58 95 95 21 15 96 96 10 58 97 109 21 15 110 110 107 x 111 122 21 15 123 127 10 58 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 108 x 117 122 21 15 123 127 10 31 -128 47 10 59 48 57 21 15 58 64 10 59 65 90 21 15 91 94 10 59 95 95 109 x 96 96 10 59 97 122 21 15 123 127 10 59 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 119 21 15 120 120 110 x 121 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 108 21 15 109 109 111 x 110 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 21 60 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 113 x 102 107 21 15 108 108 21 61 109 110 21 15 111 111 117 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 99 21 15 100 100 21 62 101 105 21 15 106 106 114 x 107 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 115 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 116 x 100 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 21 63 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 110 21 15 111 111 118 x 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 21 64 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 98 21 15 99 99 120 x 100 116 21 15 117 117 125 x 118 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 121 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 122 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 123 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 124 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 21 65 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 21 15 98 98 126 x 99 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 111 21 15 112 112 127 x 113 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 128 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 129 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 130 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 131 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 113 21 15 114 114 21 66 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 103 21 15 104 104 133 x 105 110 21 15 111 111 135 x 112 113 21 15 114 114 138 x 115 120 21 15 121 121 145 x 122 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 134 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 21 67 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 106 21 15 107 107 136 x 108 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 137 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 21 68 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 139 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 140 x 111 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 141 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 142 x 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 97 143 x 98 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 144 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 69 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 111 21 15 112 112 146 x 113 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 147 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 148 x 96 96 10 31 97 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 99 21 15 100 100 149 x 101 104 21 15 105 105 151 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 150 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 101 21 15 102 102 21 70 103 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 99 21 15 100 100 21 71 101 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 109 21 15 110 110 153 x 111 114 21 15 115 115 155 x 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 99 21 15 100 100 154 x 101 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 110 21 15 111 111 21 72 112 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 156 x 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 114 21 15 115 115 21 73 116 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 103 21 15 104 104 158 x 105 113 21 15 114 114 161 x 115 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 104 21 15 105 105 159 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 107 21 15 108 108 160 x 109 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 74 102 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 104 21 15 105 105 162 x 106 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 115 21 15 116 116 163 x 117 122 21 15 123 127 10 31 -128 47 10 31 48 57 21 15 58 64 10 31 65 90 21 15 91 94 10 31 95 95 21 15 96 96 10 31 97 100 21 15 101 101 21 75 102 122 21 15 123 127 10 31 -128 123 10 19 124 124 10 76 125 127 10 19 -128 9 3 x 10 10 10 3 11 127 3 x 6 7 x -128 -1 166 77 0 0 166 78 1 44 166 77 45 45 166 79 46 91 166 77 92 92 167 x 93 93 166 80 94 127 166 77 -128 9 166 81 10 10 166 82 11 47 166 81 48 48 166 83 49 96 166 81 97 97 166 84 98 98 166 85 99 101 166 81 102 102 166 86 103 109 166 81 110 110 166 87 111 113 166 81 114 114 166 88 115 115 166 81 116 116 166 89 117 117 166 81 118 118 166 90 119 127 166 81 6 7 x -128 -1 168 91 0 0 168 92 1 8 168 91 9 9 169 x 10 10 168 93 11 12 168 91 13 13 169 x 14 31 168 91 32 32 169 x 33 33 168 91 34 34 170 12 35 35 172 12 36 36 173 x 37 37 174 x 38 38 168 91 39 39 175 12 40 41 168 91 42 42 176 x 43 44 168 91 45 45 177 x 46 46 178 x 47 47 168 94 48 48 179 12 49 57 180 x 58 58 182 x 59 59 168 91 60 60 184 x 61 61 168 91 62 62 186 x 63 63 168 91 64 64 187 x 65 90 188 95 91 91 189 x 92 94 168 91 95 95 188 95 96 96 168 91 97 100 188 95 101 101 190 x 102 102 193 x 103 107 188 95 108 108 196 x 109 115 188 95 116 116 199 x 117 118 188 95 119 119 200 x 120 122 188 95 123 127 168 91 -128 8 168 96 9 9 169 x 10 12 168 96 13 13 169 x 14 31 168 96 32 32 169 x 33 127 168 96 -128 9 4 x 10 10 4 1 11 33 4 x 34 34 171 x 35 91 4 x 92 92 5 x 93 127 4 x -128 104 168 97 105 105 168 98 106 127 168 97 -128 9 6 x 10 10 168 4 11 127 6 x -128 32 168 99 33 33 168 100 34 41 168 99 42 42 168 101 43 46 168 99 47 47 168 102 48 62 168 99 63 63 168 103 64 93 168 99 94 94 168 104 95 125 168 99 126 126 168 105 127 127 168 99 -128 32 168 99 33 33 168 106 34 41 168 99 42 42 168 107 43 46 168 99 47 47 168 108 48 62 168 99 63 63 168 109 64 93 168 99 94 94 168 110 95 125 168 99 126 126 168 111 127 127 168 99 -128 9 7 x 10 10 7 1 11 38 7 x 39 39 171 x 40 91 7 x 92 92 8 x 93 127 7 x -128 41 168 99 42 42 168 112 43 127 168 99 -128 44 168 99 45 45 168 113 46 61 168 99 62 62 168 114 63 127 168 99 -128 45 168 99 46 46 168 115 47 127 168 99 -128 47 168 116 48 57 180 x 58 119 168 116 120 120 9 x 121 127 168 116 -128 47 168 116 48 57 180 x 58 127 168 116 -128 47 168 117 48 57 181 x 58 64 168 117 65 70 181 x 71 96 168 117 97 102 181 x 103 127 168 117 -128 60 168 99 61 61 168 118 62 62 183 x 63 127 168 99 -128 61 168 119 62 62 168 120 63 127 168 119 -128 32 168 99 33 33 168 121 34 41 168 99 42 42 168 122 43 46 168 99 47 47 168 123 48 57 168 99 58 58 168 124 59 61 168 99 62 62 185 x 63 93 168 99 94 94 168 125 95 125 168 99 126 126 168 126 127 127 168 99 -128 32 168 127 33 33 168 128 34 41 168 127 42 42 168 129 43 46 168 127 47 47 168 130 48 93 168 127 94 94 168 131 95 125 168 127 126 126 168 132 127 127 168 127 -128 32 168 99 33 33 168 133 34 41 168 99 42 42 168 134 43 46 168 99 47 47 168 135 48 62 168 99 63 63 168 136 64 93 168 99 94 94 168 137 95 125 168 99 126 126 168 138 127 127 168 99 -128 32 168 99 33 33 168 139 34 41 168 99 42 42 168 140 43 46 168 99 47 47 168 141 48 93 168 99 94 94 168 142 95 125 168 99 126 126 168 143 127 127 168 99 -128 47 168 144 48 57 188 95 58 64 168 144 65 90 188 95 91 94 168 144 95 95 188 95 96 96 168 144 97 122 188 95 123 127 168 144 -128 93 168 145 94 94 168 146 95 127 168 145 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 110 188 95 111 111 191 x 112 113 188 95 114 114 192 x 115 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 101 188 95 102 102 188 148 103 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 113 188 95 114 114 188 149 115 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 113 188 95 114 114 194 x 115 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 110 188 95 111 111 195 x 112 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 108 188 95 109 109 188 150 110 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 100 188 95 101 101 197 x 102 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 113 188 95 114 114 198 x 115 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 113 188 95 114 114 188 151 115 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 110 188 95 111 111 188 152 112 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 103 188 95 104 104 201 x 105 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 100 188 95 101 101 202 x 102 122 188 95 123 127 168 147 -128 47 168 147 48 57 188 95 58 64 168 147 65 90 188 95 91 94 168 147 95 95 188 95 96 96 168 147 97 109 188 95 110 110 188 153 111 122 188 95 123 127 168 147 6 7 x -128 9 203 154 10 10 203 155 11 33 203 154 34 34 203 156 35 90 203 154 91 91 203 157 92 92 204 x 93 127 203 154 -128 96 203 158 97 97 203 159 98 98 203 160 99 101 203 158 102 102 203 161 103 109 203 158 110 110 203 162 111 113 203 158 114 114 203 163 115 115 203 158 116 116 203 164 117 117 203 158 118 118 203 165 119 127 203 158 int word = lit = 0; word_len = lit_len = 0; lit = tokdata; lit_len = toklen; scan_error() << "bad include statement" << endl; #if 0 char *inclSectionName = word; char *inclFileName = 0; /* Implement defaults for the input file and section name. */ if ( inclSectionName == 0 ) inclSectionName = parser->sectionName; if ( lit != 0 ) inclFileName = prepareFileName( lit, lit_len ); else inclFileName = fileName; /* Check for a recursive include structure. Add the current file/section * name then check if what we are including is already in the stack. */ includeStack.append( IncludeStackItem( fileName, parser->sectionName ) ); if ( recursiveInclude( inclFileName, inclSectionName ) ) scan_error() << "include: this is a recursive include operation" << endl; else { /* Open the input file for reading. */ ifstream *inFile = new ifstream( inclFileName ); if ( ! inFile->is_open() ) { scan_error() << "include: could not open " << inclFileName << " for reading" << endl; } Scanner scanner( inclFileName, *inFile, output, parser, inclSectionName, includeDepth+1 ); scanner.do_scan( ); delete inFile; } /* Remove the last element (len-1) */ includeStack.remove( -1 ); #endif InputLoc loc; #ifdef PRINT_TOKENS cerr << "scanner:" << line << ":" << column << ": sending token to the parser " << Parser_lelNames[*p]; cerr << " " << toklen; if ( tokdata != 0 ) cerr << " " << tokdata; cerr << endl; #endif loc.fileName = fileName; loc.line = line; loc.col = column; parser->token( loc, type, tokdata, toklen ); 2 0 1 3 4 3 0 3 x x 0 -2147483648 131 x 0 132 132 2 1 133 2147483647 x 0 x x 0 -2147483648 58 x 0 59 59 3 2 60 2147483647 x 0 -2147483648 128 3 3 129 129 1 x 130 2147483647 3 3 /* * Copyright 2006-2007 Adrian Thurston <thurston@complang.org> */ /* This file is part of Ragel. */ #include <iostream> #include <fstream> #include <string.h> #include "colm.h" #include "lmscan.h" #include "lmparse.h" #include "parsedata.h" #include "avltree.h" #include "vector.h" //#define PRINT_TOKENS using std::ifstream; using std::istream; using std::ostream; using std::cout; using std::cerr; using std::endl; data void Scanner::sectionParseInit() { init } ostream &Scanner::scan_error() { /* Maintain the error count. */ gblErrorCount += 1; cerr << fileName << ":" << line << ":" << column << ": "; return cerr; } bool Scanner::recursiveInclude( char *inclFileName, char *inclSectionName ) { for ( IncludeStack::Iter si = includeStack; si.lte(); si++ ) { if ( strcmp( si->fileName, inclFileName ) == 0 && strcmp( si->sectionName, inclSectionName ) == 0 ) { return true; } } return false; } void Scanner::updateCol() { char *from = lastnl; if ( from == 0 ) from = tokstart; //cerr << "adding " << tokend - from << " to column" << endl; column += tokend - from; lastnl = 0; } void Scanner::token( int type, char c ) { token( type, &c, &c + 1 ); } void Scanner::token( int type ) { token( type, 0, 0 ); } void Scanner::token( int type, char *start, char *end ) { char *tokdata = 0; int toklen = 0; int *p = &type; int *pe = &type + 1; if ( start != 0 ) { toklen = end-start; tokdata = new char[toklen+1]; memcpy( tokdata, start, toklen ); tokdata[toklen] = 0; } exec updateCol(); } void Scanner::endSection( ) { /* Execute the eof actions for the section parser. */ eof } data void Scanner::do_scan() { int bufsize = 8; char *buf = new char[bufsize]; const char last_char = 0; int cs, act, have = 0; int top, stack[32]; bool execute = true; sectionParseInit(); init while ( execute ) { char *p = buf + have; int space = bufsize - have; if ( space == 0 ) { /* We filled up the buffer trying to scan a token. Grow it. */ bufsize = bufsize * 2; char *newbuf = new char[bufsize]; /* Recompute p and space. */ p = newbuf + have; space = bufsize - have; /* Patch up pointers possibly in use. */ if ( tokstart != 0 ) tokstart = newbuf + ( tokstart - buf ); tokend = newbuf + ( tokend - buf ); /* Copy the new buffer in. */ memcpy( newbuf, buf, have ); delete[] buf; buf = newbuf; } input.read( p, space ); int len = input.gcount(); /* If we see eof then append the EOF char. */ if ( len == 0 ) { p[0] = last_char, len = 1; execute = false; } char *pe = p + len; exec /* Check if we failed. */ if ( cs == rlscan_error ) { /* Machine failed before finding a token. I'm not yet sure if this * is reachable. */ scan_error() << "scanner error" << endl; exit(1); } /* Decide if we need to preserve anything. */ char *preserve = tokstart; /* Now set up the prefix. */ if ( preserve == 0 ) have = 0; else { /* There is data that needs to be shifted over. */ have = pe - preserve; memmove( buf, preserve, have ); unsigned int shiftback = preserve - buf; if ( tokstart != 0 ) tokstart -= shiftback; tokend -= shiftback; preserve = buf; } } delete[] buf; InputLoc loc; loc.fileName = "<EOF>"; loc.line = line; loc.col = 1; parser->token( loc, _eof, 0, 0 ); } void scan( char *fileName, istream &input, ostream &output ) { Scanner scanner( fileName, input, output, 0, 0, 0 ); } ##### EXP ##### SWITCH token( KW_When ); token( KW_Eof ); token( KW_Err ); token( KW_Lerr ); token( KW_To ); token( KW_From ); token( TK_Word, tokstart, tokend ); SWITCH token( KW_Lex ); token( KW_Action ); token( KW_AlphType ); token( KW_Commit ); token( KW_Undo ); token( KW_Final ); token( KW_Translate ); token( KW_Token ); token( KW_Literal ); token( KW_NonTerm ); token( KW_Uses ); token( KW_Parser ); token( KW_Include ); token( KW_Write ); token( KW_Nfa ); token( KW_Pda ); token( KW_Rl ); token( KW_Cfl ); token( KW_Ignore ); token( KW_End ); token( KW_Pattern ); token( KW_Construct ); token( KW_Red ); token( KW_TypeId ); token( KW_TypeDef ); token( KW_If ); token( KW_Init ); token( KW_Reject ); token( KW_While ); token( KW_Else ); token( KW_SubParser ); token( KW_Next ); token( KW_Match ); token( KW_For ); token( KW_Iter ); token( KW_Find ); token( KW_Root ); token( KW_PrintXML ); token( KW_Then ); token( KW_Do ); token( KW_Namespace ); token( KW_Scanner ); token( TK_Word, tokstart, tokend );