2013-10-11 02:18:37 -04:00
|
|
|
%{
|
2013-10-11 23:07:28 -04:00
|
|
|
#include <stdlib.h>
|
2013-10-20 21:48:03 -04:00
|
|
|
#include <string.h>
|
2013-10-11 23:07:28 -04:00
|
|
|
|
2013-10-11 02:18:37 -04:00
|
|
|
#include "picrin.h"
|
|
|
|
#include "y.tab.h"
|
|
|
|
|
2013-10-28 09:55:15 -04:00
|
|
|
#define YY_DECL int yylex_(YYSTYPE *yylvalp, yyscan_t yyscanner)
|
2013-10-11 02:18:37 -04:00
|
|
|
%}
|
|
|
|
|
2013-10-22 14:45:57 -04:00
|
|
|
%option reentrant
|
2013-10-19 14:05:42 -04:00
|
|
|
%option noinput
|
2013-10-12 05:46:41 -04:00
|
|
|
%option nounput
|
|
|
|
|
2013-10-28 00:04:24 -04:00
|
|
|
/* comment */
|
|
|
|
comment ;.*$
|
|
|
|
|
2013-10-16 00:17:01 -04:00
|
|
|
/* boolean */
|
|
|
|
boolean #t|#f|#true|#false
|
|
|
|
|
2013-10-15 21:19:16 -04:00
|
|
|
/* symbol */
|
2013-10-22 23:39:48 -04:00
|
|
|
identifier [a-z0-9A-Z+/*!$%&:@^~?<=>_.-]+
|
2013-10-15 21:19:16 -04:00
|
|
|
|
|
|
|
/* number */
|
|
|
|
digit [0-9]
|
|
|
|
real {sign}{ureal}|{infnan}
|
2013-10-27 11:21:24 -04:00
|
|
|
ureal {uinteger}|\.{digit}+|{digit}+\.{digit}*
|
|
|
|
integer {sign}{uinteger}
|
|
|
|
uinteger {digit}+
|
2013-10-15 21:19:16 -04:00
|
|
|
sign [+-]?
|
2013-10-16 00:17:01 -04:00
|
|
|
infnan "+inf.0"|"-inf.0"|"+nan.0"|"-nan.0"
|
2013-10-15 21:19:16 -04:00
|
|
|
|
2013-10-20 21:48:03 -04:00
|
|
|
/* string */
|
2013-10-23 00:44:45 -04:00
|
|
|
%x STRING
|
2013-10-20 21:48:03 -04:00
|
|
|
|
2013-10-11 02:18:37 -04:00
|
|
|
%%
|
|
|
|
|
2013-10-12 05:46:11 -04:00
|
|
|
[ \t\n\r] /* skip whitespace */
|
2013-10-28 00:04:24 -04:00
|
|
|
{comment} /* skip comment */
|
2013-10-28 09:49:15 -04:00
|
|
|
|
2013-10-17 05:14:18 -04:00
|
|
|
"." return tDOT;
|
2013-10-15 10:25:31 -04:00
|
|
|
"(" return tLPAREN;
|
|
|
|
")" return tRPAREN;
|
2013-10-20 20:29:56 -04:00
|
|
|
"'" return tQUOTE;
|
2013-10-22 23:39:48 -04:00
|
|
|
"`" return tQUASIQUOTE;
|
|
|
|
"," return tUNQUOTE;
|
|
|
|
",@" return tUNQUOTE_SPLICING;
|
2013-10-28 09:49:15 -04:00
|
|
|
|
|
|
|
{boolean} {
|
|
|
|
yylvalp->i = (yytext[1] == 't');
|
|
|
|
return tBOOLEAN;
|
|
|
|
}
|
|
|
|
|
|
|
|
{integer} {
|
|
|
|
yylvalp->i = atoi(yytext);
|
|
|
|
return tINT;
|
|
|
|
}
|
|
|
|
|
|
|
|
{real} {
|
|
|
|
yylvalp->f = atof(yytext);
|
|
|
|
return tFLOAT;
|
|
|
|
}
|
|
|
|
|
|
|
|
{identifier} {
|
|
|
|
yylvalp->cstr = strdup(yytext);
|
|
|
|
return tSYMBOL;
|
|
|
|
}
|
|
|
|
|
2013-10-23 00:44:45 -04:00
|
|
|
"\"" BEGIN(STRING);
|
|
|
|
<STRING>{
|
|
|
|
[^\\"]* yymore();
|
|
|
|
"\"" {
|
|
|
|
yytext[yyleng-1] = '\0';
|
2013-10-28 09:49:15 -04:00
|
|
|
yylvalp->cstr = strdup(yytext);
|
2013-10-23 00:44:45 -04:00
|
|
|
BEGIN(INITIAL);
|
|
|
|
return tSTRING;
|
|
|
|
}
|
|
|
|
}
|
2013-10-11 02:18:37 -04:00
|
|
|
|
|
|
|
%%
|
|
|
|
|
|
|
|
int
|
2013-10-22 14:45:57 -04:00
|
|
|
yywrap(yyscan_t yyscanner)
|
2013-10-11 02:18:37 -04:00
|
|
|
{
|
|
|
|
return 1;
|
|
|
|
}
|