diff options
Diffstat (limited to 'tksao/frame/ciaolex.L')
-rw-r--r-- | tksao/frame/ciaolex.L | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/tksao/frame/ciaolex.L b/tksao/frame/ciaolex.L new file mode 100644 index 0000000..a570c76 --- /dev/null +++ b/tksao/frame/ciaolex.L @@ -0,0 +1,146 @@ +/* Copyright (C) 1999-2016 + * Smithsonian Astrophysical Observatory, Cambridge, MA, USA + * For conditions of distribution and use, see copyright notice in "copyright" + */ + +%option noyywrap +%option caseless +%option never-interactive +%option c++ + +%{ + #include <stdio.h> + #include <stdlib.h> + #include <string.h> + + #include "util.h" + #include "ciaoparser.H" + + extern YYSTYPE* ciaolval; +%} + +D [0-9] +E [Ee][+-]?{D}+ + +/* rules */ + +%% + +annulus {return ANNULUS_;} +box {return BOX_;} +cir {return CIRCLE_;} +circle {return CIRCLE_;} +debug {return DEBUG_;} +ell {return ELLIPSE_;} +ellipse {return ELLIPSE_;} +field {return FIELD_;} +off {return OFF_;} +on {return ON_;} +pie {return PIE_;} +poi {return POINT_;} +point {return POINT_;} +poly {return POLYGON_;} +polygon {return POLYGON_;} +rect {return RECTANGLE_;} +rectangle {return RECTANGLE_;} +region {return REGION_;} +rotbox {return ROTBOX_;} +sector {return SECTOR_;} +version {return VERSION_;} + +[+-]?{D}+ { // Integer + ciaolval->integer = atoi(yytext); + return INT; + } + +[+-]?{D}+"."?({E})? | +[+-]?{D}*"."{D}+({E})? { // Real Number + ciaolval->real = atof(yytext); + return REAL; + } + +[+-]?{D}+"."?d | +[+-]?{D}*"."{D}+d { // degrees + yytext[yyleng-1] = '\0'; + ciaolval->real = atof(yytext); + return ANGDEGREE; + } + +{D}+"."?' | +{D}*"."{D}+' | +[+-]?{D}+"."?({E})?' | +[+-]?{D}*"."{D}+({E})?' { // minutes of arc + yytext[yyleng-1] = '\0'; + ciaolval->real = atof(yytext); + return ARCMINUTE; + } + +{D}+"."?\" | +{D}*"."{D}+\" | +[+-]?{D}+"."?({E})?\" | +[+-]?{D}*"."{D}+({E})?\" { // seconds of arc + yytext[yyleng-1] = '\0'; + ciaolval->real = atof(yytext); + return ARCSECOND; + } + +{D}+"."?\'\' | +{D}*"."{D}+\'\' | +[+-]?{D}+"."?({E})?\'\' | +[+-]?{D}*"."{D}+({E})?\'\' { // seconds of arc + yytext[yyleng-1] = '\0'; + ciaolval->real = atof(yytext); + return ARCSECOND; + } + +[+-]?{D}+:{D}+:{D}+"."? | +[+-]?{D}+:{D}+:{D}*"."{D}+ { // Sexagesimal + int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); + strncpy(ciaolval->str,yytext,ll); + ciaolval->str[ll] = '\0'; + return SEXSTR; + } + +[+-]?{D}+h{D}+m{D}+"."?s | +[+-]?{D}+h{D}+m{D}*"."{D}+s { // HMS + int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); + strncpy(ciaolval->str,yytext,ll); + ciaolval->str[ll] = '\0'; + return HMSSTR; + } + +[+-]?{D}+d{D}+m{D}+"."?s | +[+-]?{D}+d{D}+m{D}*"."{D}+s { // DMS + int ll = yyleng <(CIAOBUFSIZE-1) ? yyleng:(CIAOBUFSIZE-1); + strncpy(ciaolval->str,yytext,ll); + ciaolval->str[ll] = '\0'; + return DMSSTR; + } + +#.* { // comment, eat it + } + +[ \t]+ { // White Spaces + } + +\\n { // fake line feed + return '\n'; + } + +\r\n { // windows line feed + return '\n'; + } + +\n { // linefeed + return '\n'; + } + +<<EOF>> { // eof + return EOF_; + } + +. { // Else, return the char + return yytext[0]; + } + +%% |