support named characters

This commit is contained in:
Yuichi Nishiwaki 2013-11-14 19:45:38 +09:00
parent 6de5bc7550
commit 7f35eb7daa
2 changed files with 26 additions and 4 deletions

View File

@ -33,7 +33,17 @@ write(pic_state *pic, pic_value obj)
printf("%s", pic_symbol_name(pic, pic_sym(obj))); printf("%s", pic_symbol_name(pic, pic_sym(obj)));
break; break;
case PIC_TT_CHAR: case PIC_TT_CHAR:
printf("#\\%c", pic_char(obj)); switch (pic_char(obj)) {
default: printf("#\\%c", pic_char(obj)); break;
case '\a': printf("#\\alarm"); break;
case '\b': printf("#\\backspace"); break;
case 0x7f: printf("#\\delete"); break;
case 0x1b: printf("#\\escape"); break;
case '\n': printf("#\\newline"); break;
case '\r': printf("#\\return"); break;
case ' ': printf("#\\space"); break;
case '\t': printf("#\\tab"); break;
}
break; break;
case PIC_TT_FLOAT: case PIC_TT_FLOAT:
printf("%f", pic_float(obj)); printf("%f", pic_float(obj));

View File

@ -30,6 +30,9 @@ uinteger {digit}+
sign [+-]? sign [+-]?
infnan "+inf.0"|"-inf.0"|"+nan.0"|"-nan.0" infnan "+inf.0"|"-inf.0"|"+nan.0"|"-nan.0"
/* char */
%x CHAR
/* string */ /* string */
%x STRING %x STRING
@ -84,10 +87,19 @@ infnan "+inf.0"|"-inf.0"|"+nan.0"|"-nan.0"
} }
} }
#\\. { #\\ {
yylvalp->c = yytext[2]; BEGIN(CHAR);
return tCHAR;
} }
<CHAR>alarm { yylvalp->c = '\a'; BEGIN(INITIAL); return tCHAR; }
<CHAR>backspace { yylvalp->c = '\b'; BEGIN(INITIAL); return tCHAR; }
<CHAR>delete { yylvalp->c = 0x7f; BEGIN(INITIAL); return tCHAR; }
<CHAR>escape { yylvalp->c = '\e'; BEGIN(INITIAL); return tCHAR; }
<CHAR>newline { yylvalp->c = '\n'; BEGIN(INITIAL); return tCHAR; }
<CHAR>null { yylvalp->c = '\0'; BEGIN(INITIAL); return tCHAR; }
<CHAR>return { yylvalp->c = '\r'; BEGIN(INITIAL); return tCHAR; }
<CHAR>space { yylvalp->c = ' '; BEGIN(INITIAL); return tCHAR; }
<CHAR>tab { yylvalp->c = '\t'; BEGIN(INITIAL); return tCHAR; }
<CHAR>. { yylvalp->c = yytext[0]; BEGIN(INITIAL); return tCHAR; }
"#u8(" { "#u8(" {
BEGIN(BYTEVECTOR); BEGIN(BYTEVECTOR);