X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Ftools%2Fxml.l;fp=src%2Ftools%2Fxml.l;h=82dd205329dab6bab492a749b63ec9386582662d;hb=c9783d8ea8b85d810483559e50dbf2297109e349;hp=0000000000000000000000000000000000000000;hpb=2f2369dfc58997659b3007b1cea68ad6bfc49a90;p=com%2Fgs-lite.git diff --git a/src/tools/xml.l b/src/tools/xml.l new file mode 100644 index 0000000..82dd205 --- /dev/null +++ b/src/tools/xml.l @@ -0,0 +1,223 @@ +/* ------------------------------------------------ +Copyright 2014 AT&T Intellectual Property + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ------------------------------------------- */ + +/* + MUST COMPILE WITH + flex -PxmlParser -oxmllexer.cc xml.l + (or equivalent). +*/ + +%{ +/* + * AT&T lex can't handle this lexer due to lex bugs. It works with flex + * 2.3.7, pclex 2.0.5, and MKS lex 3.1a. + */ + + // #include "parse_fta.h" + #include + + + +#include "xml.tab.hh" + +/* + Some includes that flex doesn't include as standard, + but which are needed. +*/ + +#include +#include + + +// Prevent flex from defining yywrap as extern "C" + +#define YY_SKIP_YYWRAP + +/* No lex lib, supply the yywrap fcn. that normally resides there +*/ + +int xmlParserwrap(){return(1);} + +extern int xmlParserdebug; + + +/* + These variables are used for error reporting: + flex_xml_lineno : the line currently being parsed when the error occurs. + flex_xml_ch : the character on the line where the error occurs + flex_xml_linebuf : store the line for reporting. + + NOTE : 1) the fixed size flex_xml_linebuf buffer is dangerous. + 2) You might get pointed to a place shortly after + where the syntax error occurs. It is close enough + for now. +*/ + +int flex_xml_lineno = 1; +int flex_xml_ch = 0; +char flex_xml_linebuf[20000]; + +char *flex_xml_stringinput = NULL; +int flex_xml_stringinput_ptr = 0; +FILE *flex_xml_fileinput = NULL; +int my_xmlParser_yyinput(char *buf, int max_size); + + + +void xmlParsererror(char *s){ + int i; + fprintf(stderr,"On line %d, char %d: %s (token %s):\n%s\n", + flex_xml_lineno, flex_xml_ch, s, xmlParsertext, flex_xml_linebuf ); + for(i=0;i=/] { flex_xml_ch+=xmlParserleng; return yytext[0]; } + + /* names */ + +[A-Za-z_][A-Za-z0-9_:\-]* { flex_xml_ch+=xmlParserleng; xmlParserlval.strval = strdup(yytext); return NAME; } + + + /* strings */ + +\'[^\'\n]*\' { + + int c; + + xmlParserlval.strval = strdup(xmlParsertext+1); + + c = yyinput(); + + unput(c); /* just peeking */ + if(c != '\'') { + flex_xml_ch+=xmlParserleng; + xmlParserlval.strval[xmlParserleng-2] = '\0'; + return STRING_TOKEN; + } else + yymore(); + } + +\'[^\'\n]*$ { flex_xml_ch+=xmlParserleng; xmlParsererror("Unterminated string"); } + + /* */ + /* Newline : advance the error reporting line number */ + /* and grab the next line into flex_xml_linebuf */ + /* */ + +\n.* {flex_xml_ch=0; flex_xml_lineno++; + strcpy(flex_xml_linebuf,xmlParsertext+1); + yyless(1); + } + +[ \t\r]+ {flex_xml_ch+=xmlParserleng; } /* white space */ + +"--".*$ {flex_xml_ch+=xmlParserleng; }; /* comment */ +"//".*$ {flex_xml_ch+=xmlParserleng; }; /* comment */ +"