X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fftacmp%2Fxml.l;h=d394d275545392eab6463748d580221b68732079;hb=HEAD;hp=c19ec74d56b54e228a9fdeed40ed6032443753c8;hpb=07495effe193ca3f73c3bf0ce417068f9ac9dcdd;p=com%2Fgs-lite.git diff --git a/src/ftacmp/xml.l b/src/ftacmp/xml.l index c19ec74..d394d27 100644 --- a/src/ftacmp/xml.l +++ b/src/ftacmp/xml.l @@ -1,224 +1,224 @@ -/* ------------------------------------------------ -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 */ -" + + + +#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 */ +"