⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asn_lex.l

📁 pwlib源码库
💻 L
字号:
%{/* * asn_lex.l * * ASN lexical analysis file * * ASN.1 compiler to produce C++ classes. * * Copyright (c) 1997-1999 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is ASN Parser. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Portions of this code were written with the assisance of funding from * Vovida Networks, Inc. http://www.vovida.com. * * Portions are Copyright (C) 1993 Free Software Foundation, Inc. * All Rights Reserved. * * Contributor(s): ______________________________________. * * $Log: asn_lex.l,v $ * Revision 1.16  2001/04/23 04:40:14  robertj * Added ASN standard types GeneralizedTime and UTCTime * * Revision 1.15  2001/01/17 00:52:56  robertj * Added option to remove warning about isatty() under Win32. * * Revision 1.14  2001/01/17 00:33:59  robertj * Removed extra %option, there need be only one. * * Revision 1.13  2001/01/16 14:00:17  craigs * Changed MIN and MAX tokens to avoid namespace conflicts under BeOS * * Revision 1.12  2001/01/16 13:26:32  rogerh * Remove warnings by caused by unused default output and yyunput definitions. * Submitted by Jac Goudsmit <jac_goudsmit@yahoo.com> * * Revision 1.11  2000/09/11 12:27:37  robertj * Fixed missing ! in lexical scanner, thanks Luca Faustin <luca.faustin@ipc.it> * * Revision 1.10  2000/01/19 12:33:07  robertj * Fixed parsing of OID's in IMPORTS section. * * Revision 1.9  1999/07/22 06:48:55  robertj * Added comparison operation to base ASN classes and compiled ASN code. * Added support for ANY type in ASN parser. * * Revision 1.8  1999/06/09 06:58:09  robertj * Adjusted heading comments. * * Revision 1.7  1999/06/07 01:56:25  robertj * Added header comment on license. * * Revision 1.6  1999/06/06 05:30:28  robertj * Support for parameterised types and type-dentifier types. * Added ability to output multiple .cxx files. * * Revision 1.5  1999/02/09 01:26:50  robertj * Fixed warning problems with #define for identifier "comment" * * Revision 1.4  1999/01/29 12:18:51  robertj * Fixed warning in standard header file, caused by macro defined in flex.skel. * * Revision 1.3  1998/05/21 08:21:50  robertj * GNU C++ compatibility * * Revision 1.2  1998/05/21 04:21:47  robertj * Implementing more of the ASN spec. * * Revision 1.1  1997/12/13 09:17:49  robertj * Initial revision * * */#include <ptlib.h>#include "main.h"#include "asn_grammar.h"#include <ctype.h>extern FILE * yyin;extern unsigned lineNumber;int LexEcho = FALSE;#define YY_USER_ACTION if (LexEcho) cout << yytext << flush;int ReferenceTokenContext = MODULEREFERENCE;int IdentifierTokenContext = IDENTIFIER;int BraceTokenContext = '{';int NullTokenContext = NULL_TYPE;int InMacroContext = FALSE;int HasObjectTypeMacro = FALSE;int InMIBContext = FALSE;TypesList * CurrentImportList = NULL;extern "C" int yywrap() { return 1; }static int TokenSelect(int context, int token1, int token2){  if (context)    return token1;  yylval.sval = new PString(yytext);  return token2;}%}%option nounput nodefault never-interactive%x comment_line%%"::="				   { return ASSIGNMENT; }"ABSENT"                           { return ABSENT; }              "ABSTRACT-SYNTAX"                  { return ABSTRACT_SYNTAX; }"ALL"                              { return ALL; }"ANY"                              { return ANY; }"APPLICATION"                      { return APPLICATION; }"AUTOMATIC"                        { return AUTOMATIC; }"BEGIN"                            { return BEGIN_t; }"BIT"                              { return BIT; }"BMPString"                        { return BMPString; }"BOOLEAN"                          { return BOOLEAN_t; }"BY"                               { return BY; }"CHARACTER"                        { return CHARACTER; }"CHOICE"                           { return CHOICE; }"CLASS"                            { return CLASS; }"COMPONENT"                        { return COMPONENT; }"COMPONENTS"                       { return COMPONENTS; }"CONSTRAINED"                      { return CONSTRAINED; }"DEFAULT"                          { return DEFAULT; }"DEFINED"                          { return DEFINED; }"DEFINITIONS"                      { return DEFINITIONS; }"EMBEDDED"                         { return EMBEDDED; }"END"                              { return END; }"ENUMERATED"                       { return ENUMERATED; }"EXCEPT"                           { return EXCEPT; }"EXPLICIT"                         { return EXPLICIT; }"EXPORTS"                          { return EXPORTS; }"EXTERNAL"                         { return EXTERNAL; }"FALSE"                            { return FALSE_t; }"FROM"                             { return FROM; }"GeneralizedTime"                  { return GeneralizedTime; }"GeneralString"                    { return GeneralString; }"GraphicString"                    { return GraphicString; }"IA5String"                        { return IA5String; }"TYPE-IDENTIFIER"                  { return TYPE_IDENTIFIER; }"IDENTIFIER"                       { return IDENTIFIER_t; }"IMPLICIT"                         { return IMPLICIT; }"IMPORTS"                          { return IMPORTS; }"INCLUDES"                         { return INCLUDES; }"INSTANCE"                         { return INSTANCE; }"INTEGER"                          { return INTEGER_t; }"INTERSECTION"                     { return INTERSECTION; }"ISO646String"                     { return ISO646String; }"MACRO"				   { return MACRO; }"MAX"                              { return MAX_t; }"MIN"                              { return MIN_t; }"MINUS-INFINITY"                   { return MINUS_INFINITY; }"NOTATION"			   { return NOTATION; }"NULL"                             { return NullTokenContext; }"NumericString"                    { return NumericString; }"OBJECT"                           { return OBJECT; }"OCTET"                            { return OCTET; }"OF"                               { return OF_t; }"OPTIONAL"                         { return OPTIONAL_t; }"PDV"                              { return PDV; }"PLUS-INFINITY"                    { return PLUS_INFINITY; }"PRESENT"                          { return PRESENT; }"PrintableString"                  { return PrintableString; }"PRIVATE"                          { return PRIVATE; }"REAL"                             { return REAL; }"SEQUENCE"                         { return SEQUENCE; }"SET"                              { return SET; }"SIZE"                             { return SIZE_t; }"STRING"                           { return STRING; }"SYNTAX"                           { return SYNTAX; }"T61String"                        { return T61String; }"TAGS"                             { return TAGS; }"TeletexString"                    { return TeletexString; }"TRUE"                             { return TRUE_t; }"TYPE"				   { return TYPE_t; }"UNION"                            { return UNION; }"UNIQUE"                           { return UNIQUE; }"UNIVERSAL"                        { return UNIVERSAL; }"UniversalString"                  { return UniversalString; }"UTCTime"                          { return UTCTime; }"VALUE"				   { return VALUE; }"VideotexString"                   { return VideotexString; }"VisibleString"                    { return VisibleString; }"WITH"                             { return WITH; }"string"                           { return TokenSelect(InMacroContext, string_t, IDENTIFIER); }"identifier"                       { return TokenSelect(InMacroContext, identifier_t, IDENTIFIER); }"number"                           { return TokenSelect(InMacroContext, number_t, IDENTIFIER); }"empty"                            { return TokenSelect(InMacroContext, empty_t, IDENTIFIER); }"type"                             { return TokenSelect(InMacroContext, type_t, IDENTIFIER); }"value"                            { return TokenSelect(InMacroContext, value_t, IDENTIFIER); }"OBJECT-TYPE"			   { return TokenSelect(HasObjectTypeMacro, OBJECT_TYPE, ReferenceTokenContext); }"TRAP-TYPE"			   { return TokenSelect(HasObjectTypeMacro, TRAP_TYPE, ReferenceTokenContext); }"ACCESS"			   { return TokenSelect(InMIBContext, ACCESS, ReferenceTokenContext); }"STATUS"			   { return TokenSelect(InMIBContext, STATUS, ReferenceTokenContext); }"read-only"			   { return TokenSelect(InMIBContext, read_only_t, IDENTIFIER); }"read-write"			   { return TokenSelect(InMIBContext, read_write_t, IDENTIFIER); }"write-only"			   { return TokenSelect(InMIBContext, write_only_t, IDENTIFIER); }"not-accessible"		   { return TokenSelect(InMIBContext, not_accessible_t, IDENTIFIER); }"mandatory"			   { return TokenSelect(InMIBContext, mandatory_t, IDENTIFIER); }"optional"			   { return TokenSelect(InMIBContext, optional_t, IDENTIFIER); }"obsolete"			   { return TokenSelect(InMIBContext, obsolete_t, IDENTIFIER); }"deprecated"			   { return TokenSelect(InMIBContext, deprecated_t, IDENTIFIER); }"DESCRIPTION"			   { return TokenSelect(InMIBContext, DESCRIPTION_t, ReferenceTokenContext); }"REFERENCE"			   { return TokenSelect(InMIBContext, REFERENCE_t, ReferenceTokenContext); }"INDEX"				   { return TokenSelect(InMIBContext, INDEX_t, ReferenceTokenContext); }"DEFVAL"			   { return TokenSelect(InMIBContext, DEFVAL_t, ReferenceTokenContext); }"ENTERPRISE"			   { return TokenSelect(InMIBContext, ENTERPRISE, ReferenceTokenContext); }"VARIABLES"			   { return TokenSelect(InMIBContext, VARIABLES, ReferenceTokenContext); }                                                                 "--" {    BEGIN(comment_line);  }<comment_line>"--"  {    BEGIN(INITIAL);  }<comment_line>\n  {    lineNumber++;    BEGIN(INITIAL);  }<comment_line>. {}"@"  { return '@'; }"{"  { return BraceTokenContext; }"}"  { return '}'; }"["  { return '['; }"]"  { return ']'; }"("  { return '('; }")"  { return ')'; }"<"  { return '<'; }">"  { return '>'; }"|"  { return '|'; }";"  { return ';'; }"+"  { return '+'; }"-"  { return '-'; }"*"  { return '*'; }"/"  { return '/'; }","  { return ','; }"."  { return '.'; }":"  { return ':'; }"="  { return '='; }'|'  { return '|'; }"^"  { return '^'; }"!"  { return '!'; }(\"[^\"]*\")(\"[^\"]*\")*  {    PString s = yytext;    PINDEX pos;    while ((pos = s.Find('\n')) != P_MAX_INDEX) {      PINDEX start = pos;      while (start > 0 && isspace(s[start-1]))	start--;      while (isspace(s[pos]))	pos++;      s.Splice(" ", start, pos - start);      lineNumber++;    }    yylval.sval = new PString(s);    return CSTRING;  }[0-9][0-9]*  {    const char * ptr = yytext;    yylval.ival = 0;    while (*ptr != '\0')      yylval.ival = yylval.ival * 10 + *ptr++ - '0';    return INTEGER;  }([a-z]|([a-z][a-zA-Z0-9_-]*[a-zA-Z0-9_]))  {    yylval.sval = new PString(yytext);    if (CurrentImportList != NULL) {      ImportedType searchArg(new PString(yytext), FALSE);      if (CurrentImportList->GetValuesIndex(searchArg) != P_MAX_INDEX)        return IMPORT_IDENTIFIER;    }    return IdentifierTokenContext;  }"&"([a-z]|([a-z][a-zA-Z0-9_-]*[a-zA-Z0-9_]))  {   /* See X.681 section 7.5 */    yylval.sval = new PString(yytext);    return VALUEFIELDREFERENCE;  }"&"([A-Z]|([A-Z][a-zA-Z0-9_-]*[a-zA-Z0-9_]))  {	  /* See X.681 section 7.4 */    yylval.sval = new PString(yytext);    return TYPEFIELDREFERENCE;  }([A-Z]|([A-Z][a-zA-Z0-9_-]*[a-zA-Z0-9_]))  {	  /* See X.680 section 9.2 */    yylval.sval = new PString(yytext);    if (CurrentImportList != NULL &&	CurrentImportList->GetValuesIndex(SearchType(*yylval.sval)) != P_MAX_INDEX)      return IMPORT_IDENTIFIER;    return ReferenceTokenContext;  }[ \t\r]  { }\n {    lineNumber++;  }.  { PError << StdError(Fatal) << "unknown token " << yytext << endl; }%%/* End PR_LEX.L */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -