/* -*- C -*- CalLibraryGram.ll: Lexical analyzer for cal library files Copyright (C) 2015 Associated Universities, Inc. Washington DC, USA. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. Correspondence concerning AIPS++ should be addressed as follows: Internet email: aips2-request@nrao.edu. Postal address: AIPS++ Project Office National Radio Astronomy Observatory 520 Edgemont Road Charlottesville, VA 22903-2475 USA */ /* yy_unput is not used, so let flex not generate it, otherwise picky compilers will issue warnings. */ %option nounput %{ #undef YY_INPUT #define YY_INPUT(buf,result,max_size) result = calLibraryGramInput(buf, max_size) #undef YY_DECL #define YY_DECL int CalLibraryGramlex (YYSTYPE* lvalp) #include <string.h> %} QSTRING \"[^\"\n]*\" ASTRING \'[^\'\n]*\' STRINGS ({QSTRING}|{ASTRING})+ %x ORDERED_LIST %% [ \t] ; ^\n { ++(calLibLineNum()); } ^[ \t]*#.*\n { ++(calLibLineNum()); } // comment True|T|true { lvalp->bval = true; return BOOLEAN; } False|F|false { lvalp->bval = false; return BOOLEAN; } [0-9]+\.[0-9]+ { lvalp->fval = atof(CalLibraryGramtext); return FLOAT; } [0-9]+ { lvalp->ival = atoi(CalLibraryGramtext); return INT; } "=" { return EQ; } [,\n] { ++(calLibLineNum()); return ENDL; } [a-zA-Z0-9]+ { // copy in case CalLibraryGramtext changes underneath us: lvalp->sval = strdup(CalLibraryGramtext); return STRING; } {STRINGS} { // copy in case CalLibraryGramtext changes underneath us: std::string str = strdup(CalLibraryGramtext); char * cstr = new char[yyleng]; strcpy(cstr, str.substr(1, yyleng - 2).c_str()); lvalp->sval = cstr; return STRING; } "[" { BEGIN(ORDERED_LIST); } // begin ordered list <ORDERED_LIST>[ ,] ; // ignore spaces and commas <ORDERED_LIST>[0-9]+ { lvalp->idx_int = atoi(CalLibraryGramtext); return ARRAY_INT; } <ORDERED_LIST>"]" { BEGIN(INITIAL); // end of list, back to normal return END_LIST; } . ;