parse int values

This commit is contained in:
Yuichi Nishiwaki 2013-10-12 12:07:28 +09:00
parent 1a45eab148
commit 2ee11a367f
2 changed files with 18 additions and 2 deletions

View File

@ -21,10 +21,10 @@ struct parser_control {
} }
%token tLPAREN tRPAREN tDOT %token tLPAREN tRPAREN tDOT
%token <datum> tSYMBOL %token <datum> tSYMBOL tINT
%type <datum> datum simple_datum symbol compound_datum %type <datum> datum simple_datum symbol compound_datum
%type <datum> list list_tail %type <datum> number integer list list_tail
%% %%
@ -46,6 +46,7 @@ datum
simple_datum simple_datum
: symbol : symbol
| number
; ;
symbol symbol
@ -55,6 +56,17 @@ symbol
} }
; ;
number
: integer
;
integer
: tINT
{
$$ = $1;
}
;
compound_datum compound_datum
: list : list
; ;
@ -96,6 +108,7 @@ pic_parse(pic_state *pic, const char *str)
struct parser_control p; struct parser_control p;
p.pic = pic; p.pic = pic;
p.value = pic_int_value(42);
yy_scan_string(str); yy_scan_string(str);
yyparse(&p); yyparse(&p);

View File

@ -1,4 +1,6 @@
%{ %{
#include <stdlib.h>
#include "picrin.h" #include "picrin.h"
#include "y.tab.h" #include "y.tab.h"
@ -14,6 +16,7 @@ struct parser_control {
"(" return tLPAREN; "(" return tLPAREN;
")" return tRPAREN; ")" return tRPAREN;
[1-9][0-9]* { yylval.datum = pic_int_value(atoi(yytext)); return tINT; }
[a-z0-9A-Z]+ { yylval.datum = pic_intern_cstr(p->pic, yytext); return tSYMBOL; } [a-z0-9A-Z]+ { yylval.datum = pic_intern_cstr(p->pic, yytext); return tSYMBOL; }
%% %%