DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T l

⟦a665b97f0⟧ TextFile

    Length: 10057 (0x2749)
    Types: TextFile
    Names: »lex.l.gnrc«

Derivation

└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
    └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« 
        └─⟦d3ac74d73⟧ 
            └─⟦this⟧ »isode-5.0/pepy/lex.l.gnrc« 

TextFile

/* lex.l - lex ASN.1 analyzer */
/* %WARNING% */

%{
#ifndef	lint
static char *RCSid = "$Header: /f/osi/pepy/RCS/lex.l.gnrc,v 6.0 89/03/18 23:37:30 mrose Rel $";
#endif

/* 
 * $Header: /f/osi/pepy/RCS/lex.l.gnrc,v 6.0 89/03/18 23:37:30 mrose Rel $
 *
 *
 * $Log:	lex.l.gnrc,v $
 * Revision 6.0  89/03/18  23:37:30  mrose
 * Release 5.0
 * 
 */

/*
 *				  NOTICE
 *
 *    Acquisition, use, and distribution of this module and related
 *    materials are subject to the restrictions of a license agreement.
 *    Consult the Preface in the User's Manual for the full terms of
 *    this agreement.
 *
 *
 */


struct table {
    char   *t_keyword;
    int	    t_value;
};

static struct table reserved[] = {
    "ABSENT", ABSENT,
    "ANY", ANY,
    "APPLICATION", APPLICATION,
    "BEGIN", BGIN,
    "BIT", BIT,
    "BITSTRING", BITSTRING,
    "BOOLEAN", BOOLEAN,
    "BY", BY,
    "CHOICE", CHOICE,
    "COMPONENT", COMPONENT,
    "COMPONENTS", COMPONENTS,
    "COMPONENTSOF", COMPONENTSOF,
    "DECODER", DECODER,
    "DEFAULT", DEFAULT,
    "DEFINED", DEFINED,
    "DEFINITIONS", DEFINITIONS,
    "ENCODER", ENCODER,
    "ENCRYPTED", ENCRYPTED,
    "END", END,
    "ENUMERATED", ENUMERATED,
    "EXPLICIT", EXPLICIT,
    "EXPORTS", EXPORTS,
    "FALSE", FALSE,
    "FROM", FROM,
    "IDENTIFIER", IDENTIFIER,
    "IMPLICIT", IMPLICIT,
    "IMPORTS", IMPORTS,
    "INCLUDE", INCLUDES,
    "INTEGER", INTEGER,
    "MIN", MIN,
    "MAX", MAX,
    "NULL", NIL,
    "OBJECT", OBJECT,
    "OCTET", OCTET,
    "OCTETSTRING", OCTETSTRING,
    "OF", OF,
    "OPTIONAL", OPTIONAL,
    "PREFIXES", PREFIXES,
    "PRESENT", PRESENT,
    "PRINTER", PRINTER,
    "PRIVATE", PRIVATE,
    "REAL", REAL,
    "SECTIONS", SECTIONS,
    "SEQUENCE", SEQUENCE,
    "SEQUENCEOF", SEQUENCEOF,
    "SET", SET,
    "SETOF", SETOF,
    "SIZE", SIZE,
    "STRING", STRING,
    "TAGS", TAGS,
    "TRUE", TRUE,
    "UNIVERSAL", UNIVERSAL,
    "WITH", WITH,
%BEGIN(ROSY)%
    "OPERATION", OPERATION,
    "ARGUMENT", ARGUMENT,
    "RESULT", RESULT,
    "ERRORS", ERRORS,
    "LINKED", LINKED,
    "ERROR", ERROR,
    "PARAMETER", PARAMETER,
/* start new stuff */
    "ABSTRACT-OPERATION", OPERATION,
    "ABSTRACT-ERROR", ERROR,
    "ABSTRACT", ABSTRACT,
    "OPERATIONS", OPERATIONS,
    "CONSUMER", CONSUMER,
    "SUPPLIER", SUPPLIER,
    "INVOKES", INVOKES,
    "PORT", PORT,
    "PORTS", PORTS,
/* refine is beyond me! (JPO)
    "REFINE", REFINE,
    "AS", AS,
    "RECURRING", RECURRING,
    "VISIBLE", VISIBLE,
    "PAIRED", PAIRED,
*/
/* end new stuff */
%END(ROSY)%
%BEGIN(MOSY)%
    "OBJECT-TYPE", OBJECTYPE,
    "SYNTAX", SYNTAX,
    "ACCESS", ACCESS,
    "STATUS", STATUS,
%END(MOSY)%
    NULL, 0
};
%}

%%

"--"			{   register int c, d;

			    for (d = 0; c = input (); d = c == '-')
				if (c == '\n' || (d && c == '-'))
				    break;
			}
[ \t]*			{
			    if (yydebug)
				fprintf (stderr, "WT\n");
			}
\n			{
			    if (yydebug)
				fprintf (stderr, "NL\n");
			}
"::="			{
			    if (yydebug)
				fprintf (stderr, "SY: CCE\n");
			    return CCE;
			}
"..."			{
			    if (yydebug)
			    	fprintf (stderr, "SY: DOTDOTDOT\n");
			    return DOTDOTDOT;
			}
".."			{
    			    if (yydebug)
				fprintf (stderr, "SY: DOTDOT\n");
			    return DOTDOT;
			}
"."			{
			    if (yydebug)
				fprintf (stderr, "SY: DOT\n");
			    return DOT;
			}
";"			{
			    if (yydebug)
				fprintf (stderr, "SY: SEMICOLON");
			    return SEMICOLON;
			}
","			{
			    if (yydebug)
				fprintf (stderr, "SY: COMMA\n");
			    return COMMA;
			}
"{"			{
			    if (yydebug)
				fprintf (stderr, "SY: LBRACE\n");
			    return LBRACE;
			}
"}"			{
			    if (yydebug)
				fprintf (stderr, "SY: RBRACE\n");
			    return RBRACE;
			}
"|"			{
			    if (yydebug)
				fprintf (stderr, "SY: BAR\n");
			    return BAR;
			}
%BEGIN(ROSY)%
"[S]"			{
			    if (yydebug)
				fprintf (stderr, "SY: OBJECTSUPPLIER\n");
			    return OBJECTSUPPLIER;
			}
"[C]"			{
			    if (yydebug)
				fprintf (stderr, "SY: OBJECTCONSUMER\n");
			    return OBJECTCONSUMER;
			}
%END(ROSY)%
"[["|"$"|"<<"		{   register int tok, c, d, len;
			    register char *cp, *ep, *pp;

			    if (*yytext == '$')
				tok = VLENGTH;
			    else
				if (*yytext == '<')
				    tok = CONTROL;
				else {
				    while((c = input()) == ' ' || c =='\t')
				        continue;
				    switch (c) {
					case 'a': tok = VALA;
						  break;
					case 'b': tok = VALB;
						  break;
					case 'i': tok = VALI;
						  break;
					case 's': tok = VALS;
						  break;
					case 'o': tok = VALO;
						  break;
					case 'x': tok = VALX;
						  break;
					case 'p': tok = VALP;
						  break;
					case 'q': tok = VALQ;
					    	  break;
					case 'O': tok = VALOID;
						  break;
					case 'P': tok = PARAMETERTYPE;
					    	  break;
					default : myyerror ("unknown token: \"%s\"", yytext);
						  break;
				    }
				    if ((c = input()) != ' ' && c != '\t'
					&& c != '\n')
					yyerror ("syntax error in [[ ... ]]");
				}
 
			    if ((pp = malloc ((unsigned) (len = BUFSIZ)))
				    == NULL)
				yyerror ("out of memory");

			    for (ep = (cp = pp) + len - 1, d = NULL;; d = c) {
				if ((c = input ()) == NULL)
				    yyerror ("end-of-file while reading value");
				if ((d == ']' && c == ']' && tok !=CONTROL) ||
				    (c == '$' && (tok ==VALX || tok ==VALO)) ||
				    (d == '>' && c == '>' && tok ==CONTROL)) {
				    if ((tok == VALX || tok == VALO) &&
				       (c != '$'))
				       yyerror("Missing '$' in [[ - ]]");
				    if (c == '$') {unput(c); *cp = NULL;}
				    else *--cp = NULL;
				    yylval.yy_string = pp;
				    if (yydebug)
					fprintf (stderr, "VAL: \"%s\"\n",
						yylval.yy_string);
				    return tok;
				}
				if (cp >= ep) {
				    register int curlen = cp - pp;
				    register char *dp;

				    if ((dp = realloc (pp,
						(unsigned) (len += BUFSIZ)))
					    == NULL)
					yyerror ("out of memory");
				    cp = dp + curlen;
				    ep = (pp = dp) + len - 1;
				}
				*cp++ = c;
			    }
			}
"["			{
			    if (yydebug)
				fprintf (stderr, "SY: LBRACKET\n");
			    return LBRACKET;
			}
"]"			{
			    if (yydebug)
				fprintf (stderr, "SY: RBRACKET\n");
			    return RBRACKET;
			}
"<"			{
			    if (yydebug)
				fprintf (stderr, "SY: LANGLE\n");
			    return LANGLE;
			}
"("			{
			    if (yydebug)
				fprintf (stderr, "SY: LPAREN\n");
			    return LPAREN;
			}
")"			{
			    if (yydebug)
				fprintf (stderr, "SY: RPAREN\n");
			    return RPAREN;
			}
[0-9]+			{
			    (void) sscanf (yytext, "%d", &yylval.yy_number);
			    if (yydebug)
				fprintf (stderr, "LIT: 0x%x\n", yylval.yy_number);
			    return LITNUMBER;
			}
-[0-9]+			{
			    (void) sscanf (yytext, "%d", &yylval.yy_number);
			    if (yydebug)
				fprintf (stderr, "LIT: 0x%x\n", yylval.yy_number);
			    return LITNUMBER;
			}
'[^'$]*'[BbHh]		{   register char *cp; register int i;

			    switch (*(cp = yytext + strlen (yytext) - 1)) {
				case 'H':
				case 'h':
				    *cp = NULL;
				    (void) sscanf (yytext + 1, "%x",
						&yylval.yy_number);
				    break;

				case 'B':
				case 'b':
				    *cp-- = NULL, *cp = NULL;
				    for (i = 0, cp = yytext + 1; *cp; ) {
					i <<= 1;
					i += *cp++ - '0';
				    }
				    yylval.yy_number = i;
				    break; 
			    }
			    if (yydebug)
				fprintf (stderr, "LIT: 0x%x\n", yylval.yy_number);
			    return LITNUMBER;
			}
\"[^\"$]*\"		{
			    yytext[strlen (yytext) - 1] = NULL;
			    yylval.yy_string = new_string (yytext + 1);
			    if (yydebug)
				fprintf (stderr, "LIT: \"%s\"\n", yylval.yy_string);
			    return LITSTRING;
			}
[A-Z][A-Za-z0-9-]*	{   register struct table *t;

			    for (t = reserved; t -> t_keyword; t++)
				if (strcmp (t -> t_keyword, yytext) == 0) {
				    if (yydebug)
					fprintf (stderr,
						  "KE: \"%s\"\n", yytext);
				    return t -> t_value;
				}
			    yylval.yy_string = new_string (yytext);
			    if (yydebug)
				fprintf (stderr, "ID: \"%s\"\n", yylval.yy_string);
			    return ID;
			}
[a-z][A-Za-z0-9-]*	{   yylval.yy_string = new_string (yytext);
			    if (yydebug)
				fprintf (stderr, "NAME: \"%s\"\n", yylval.yy_string);
			    return NAME;
			}
"%["			{   register int c, d, len;
			    register char *cp, *ep, *pp;

			    if ((pp = malloc ((unsigned) (len = BUFSIZ)))
				    == NULL)
				yyerror ("out of memory");

			    for (ep = (cp = pp) + len - 1, d = NULL;; d = c) {
				if ((c = input ()) == NULL)
				    yyerror ("end-of-file while reading value");
				if (d == '%' && c == ']' ) {
				    *--cp = NULL;
				    yylval.yy_string = pp;
				    if (yydebug)
					fprintf (stderr, "VAL: \"%s\"\n",
						 yylval.yy_string);
				    return SCTRL;
				}
				if (d == '\n')
				    yyerror ("newline in %[ %] construct");
				if (cp >= ep) {
				    register int curlen = cp - pp;
				    register char *dp;

				    if ((dp = realloc (pp,
						(unsigned) (len += BUFSIZ)))
					    == NULL)
					yyerror ("out of memory");
				    cp = dp + curlen;
				    ep = (pp = dp) + len - 1;
				}
				*cp++ = c;
			    }
			}
"%{"			{   register int c, d, len;
			    int	    mylineno;
			    register char *cp, *ep, *pp;

			    mylineno = yylineno;
			    if ((pp = malloc ((unsigned) (len = BUFSIZ)))
				    == NULL)
				yyerror ("out of memory");

			    for (ep = (cp = pp) + len - 1, d = NULL;; d = c) {
				if ((c = input ()) == NULL)
				    yyerror ("end-of-file while reading action");
				if (d == '%' && c == '}') {
				    *--cp = NULL;
				    yylval.yy_action = new_action (pp, mylineno);;
				    if (yydebug)
					fprintf (stderr, "ACTION: \"%s\", %d\n",
						yylval.yy_action -> ya_text,
						yylval.yy_action -> ya_lineno);
				    return ACTION;
				}
				if (cp >= ep) {
				    register int curlen = cp - pp;
				    register char *dp;

				    if ((dp = realloc (pp,
						(unsigned) (len += BUFSIZ)))
					    == NULL)
					yyerror ("out of memory");
				    cp = dp + curlen;
				    ep = (pp = dp) + len - 1;
				}
				*cp++ = c;
			    }
			}
.			{   
			    myyerror ("unknown token: \"%s\"", yytext);
			}

%%