Mercurial > hg > Members > nobuyasu > myCompiler
comparison Bison-Flex/Compiler-StackBase/UTF8/script-scanner.ll @ 5:caede627f691
chage encoding
author | nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 17 May 2011 12:45:07 +0900 |
parents | 805d39d28230 |
children | 86c0a38332fe |
comparison
equal
deleted
inserted
replaced
4:805d39d28230 | 5:caede627f691 |
---|---|
62 "break" return token::TK_BREAK; | 62 "break" return token::TK_BREAK; |
63 | 63 |
64 "string" return token::TK_STRING; | 64 "string" return token::TK_STRING; |
65 "int" return token::TK_INTEGER; | 65 "int" return token::TK_INTEGER; |
66 "void" return token::TK_VOID; | 66 "void" return token::TK_VOID; |
67 "__code" return token::TK_CODE; | |
67 | 68 |
68 "return" return token::TK_RETURN; | 69 "return" return token::TK_RETURN; |
69 | 70 |
70 \\\n yylloc->lines(); | 71 \\\n yylloc->lines(); |
71 | 72 |
94 } | 95 } |
95 {int} { | 96 {int} { |
96 errno = 0; | 97 errno = 0; |
97 long n = strtol(yytext, NULL, 10); | 98 long n = strtol(yytext, NULL, 10); |
98 if (n < LONG_MIN || n > LONG_MAX || errno == ERANGE) | 99 if (n < LONG_MIN || n > LONG_MAX || errno == ERANGE) |
99 driver.error(*yylloc, "整数が範囲外です。"); | 100 driver.error(*yylloc, "贋違膀峨с"); |
100 yylval->ival = n; | 101 yylval->ival = n; |
101 return token::TK_IVAL; | 102 return token::TK_IVAL; |
102 } | 103 } |
103 "0" { | 104 "0" { |
104 yylval->ival = 0; | 105 yylval->ival = 0; |
106 } | 107 } |
107 {id} { | 108 {id} { |
108 yylval->sval = new std::string(yytext); | 109 yylval->sval = new std::string(yytext); |
109 return token::TK_IDENTIFIER; | 110 return token::TK_IDENTIFIER; |
110 } | 111 } |
111 . driver.error(*yylloc, "この文字を識別子で使用することはできません。"); | 112 . driver.error(*yylloc, "絖茘ュт戎с障"); |
112 } | 113 } |
113 <STRING>{ | 114 <STRING>{ |
114 \n { | 115 \n { |
115 yylloc->lines(); | 116 yylloc->lines(); |
116 driver.error(*yylloc, "文字列がとじられていません"); | 117 driver.error(*yylloc, "絖障"); |
117 string_buffer.clear(); | 118 string_buffer.clear(); |
118 BEGIN(INITIAL); | 119 BEGIN(INITIAL); |
119 } | 120 } |
120 <<EOF>> { | 121 <<EOF>> { |
121 driver.error(*yylloc, "文字列の途中でファイルが終了しました"); | 122 driver.error(*yylloc, "絖筝с<ゃ腟篋障"); |
122 string_buffer.clear(); | 123 string_buffer.clear(); |
123 BEGIN(INITIAL); | 124 BEGIN(INITIAL); |
124 } | 125 } |
125 ([\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc])+ { | 126 ([\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc])+ { |
126 string_buffer += yytext; | 127 string_buffer += yytext; |
153 } | 154 } |
154 } | 155 } |
155 <C_COMMENT>{ | 156 <C_COMMENT>{ |
156 [^*\n]* | 157 [^*\n]* |
157 [^*\n]*\n { yylloc->lines(); } | 158 [^*\n]*\n { yylloc->lines(); } |
158 "*"+[^*/\n]* /* 余分な*を探す */ | 159 "*"+[^*/\n]* /* 篏*「 */ |
159 "*"+[^*/\n]*\n { yylloc->lines(); } | 160 "*"+[^*/\n]*\n { yylloc->lines(); } |
160 <<EOF>> driver.error(*yylloc, "コメントの途中でファイルが終了しました"); | 161 <<EOF>> driver.error(*yylloc, "潟<潟筝с<ゃ腟篋障"); |
161 "*"+"/" BEGIN(INITIAL); | 162 "*"+"/" BEGIN(INITIAL); |
162 } | 163 } |
163 %% | 164 %% |
164 | 165 |
165 void compiler::scan_begin() | 166 void compiler::scan_begin() |
166 { | 167 { |
167 if ((yyin = fopen(file.c_str(), "r")) == 0) | 168 if ((yyin = fopen(file.c_str(), "r")) == 0) |
168 error(file + " がオープンできません。"); | 169 error(file + " 若潟с障"); |
169 } | 170 } |
170 | 171 |
171 void compiler::scan_end() | 172 void compiler::scan_end() |
172 { | 173 { |
173 fclose(yyin); | 174 fclose(yyin); |