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);