Blame lib/scanner-sming.l

Packit Service 9ccfef
/*
Packit Service 9ccfef
 * scanner-sming.l --
Packit Service 9ccfef
 *
Packit Service 9ccfef
 *      Lexical rules for scanning the SMIng MIB module language.
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * Copyright (c) 1999 Frank Strauss, Technical University of Braunschweig.
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * See the file "COPYING" for information on usage and redistribution
Packit Service 9ccfef
 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Packit Service 9ccfef
 *
Packit Service 9ccfef
 * @(#) $Id: scanner-sming.l 7734 2008-02-15 07:49:14Z schoenw $
Packit Service 9ccfef
 */
Packit Service 9ccfef
Packit Service 9ccfef
%option noyywrap
Packit Service 9ccfef
Packit Service 9ccfef
%{
Packit Service 9ccfef
Packit Service 9ccfef
#include <config.h>
Packit Service 9ccfef
    
Packit Service 9ccfef
#ifdef BACKEND_SMING
Packit Service 9ccfef
Packit Service 9ccfef
#include <stdio.h>
Packit Service 9ccfef
#include <string.h>
Packit Service 9ccfef
#include <ctype.h>
Packit Service 9ccfef
#include <errno.h>
Packit Service 9ccfef
Packit Service 9ccfef
#if defined(HAVE_WIN_H)
Packit Service 9ccfef
#include "win.h"
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
#include "error.h"
Packit Service 9ccfef
#include "util.h"
Packit Service 9ccfef
#include "parser-sming.h"
Packit Service 9ccfef
#include "parser-sming.tab.h"
Packit Service 9ccfef
#include "scanner-sming.h"
Packit Service 9ccfef
Packit Service 9ccfef
#ifdef HAVE_DMALLOC_H
Packit Service 9ccfef
#include <dmalloc.h>
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/* we need a reentrant parser, so yylex gets arguments */
Packit Service 9ccfef
#if 0
Packit Service 9ccfef
#define YY_DECL int yylex YY_PROTO((YYSTYPE *lvalp, void *parser))
Packit Service 9ccfef
#else
Packit Service 9ccfef
#define YY_DECL int yylex(YYSTYPE *lvalp, void *parser)
Packit Service 9ccfef
#endif
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
#define thisParser (*(Parser *) parser)
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
#define MAX_NUMBER		"18446744073709551615" /* max Counter64 */
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/*
Packit Service 9ccfef
 * This makes the usual notation when referencing attributes also
Packit Service 9ccfef
 * work with our pure parser code.
Packit Service 9ccfef
 */
Packit Service 9ccfef
#define yylval (*lvalp)
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
static YY_BUFFER_STATE yybuffer[MAX_LEX_DEPTH];
Packit Service 9ccfef
Packit Service 9ccfef
static int lexDepth = 0; 
Packit Service 9ccfef
Packit Service 9ccfef
 
Packit Service 9ccfef
int
Packit Service 9ccfef
smingEnterLexRecursion(file)
Packit Service 9ccfef
    FILE *file;
Packit Service 9ccfef
{
Packit Service 9ccfef
    if (lexDepth >= MAX_LEX_DEPTH) {
Packit Service 9ccfef
	return (-1);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    yybuffer[lexDepth++] = YY_CURRENT_BUFFER;
Packit Service 9ccfef
    yy_switch_to_buffer(yy_create_buffer(file, YY_BUF_SIZE));
Packit Service 9ccfef
    return (lexDepth);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
 
Packit Service 9ccfef
void
Packit Service 9ccfef
smingLeaveLexRecursion()
Packit Service 9ccfef
{    
Packit Service 9ccfef
    yy_delete_buffer(YY_CURRENT_BUFFER);
Packit Service 9ccfef
    yy_switch_to_buffer(yybuffer[--lexDepth]);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
%}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/*
Packit Service 9ccfef
 * Lex pattern definitions.
Packit Service 9ccfef
 */
Packit Service 9ccfef
delim		([^a-zA-Z0-9-])
Packit Service 9ccfef
lineBreak       ("\n"|"\n\015"|"\015\n")
Packit Service 9ccfef
WSP		(" "|"\t")
Packit Service 9ccfef
VCHAR		([\041-\176])
Packit Service 9ccfef
HTAB		"\t"
Packit Service 9ccfef
SP		" "
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
/*
Packit Service 9ccfef
 * Lex state definitions.
Packit Service 9ccfef
 */
Packit Service 9ccfef
%s		Skipline
Packit Service 9ccfef
Packit Service 9ccfef
%%
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for comments. Do you use {lineBreak} here because it
Packit Service 9ccfef
  * introduces a trailing context which is (a) slow and (b) causes
Packit Service 9ccfef
  * REJECT to be used.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>"//"({WSP}|{VCHAR})*/"\n" {
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>"//"({WSP}|{VCHAR})*/"\n\015" {
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>"//"({WSP}|{VCHAR})*/"\015\n" {
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for some special tokens.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>[\{\}\(\)\;\,\-\.\|] {
Packit Service 9ccfef
    return yytext[0];
Packit Service 9ccfef
}
Packit Service 9ccfef
    
Packit Service 9ccfef
<INITIAL>".." {
Packit Service 9ccfef
    return DOT_DOT;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>"."/[^\.] {
Packit Service 9ccfef
    return DOT;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>"::" {
Packit Service 9ccfef
    return COLON_COLON;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for separators.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>{lineBreak} {
Packit Service 9ccfef
    thisParser.line++;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>{WSP} {
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for known keywords.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>module/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return moduleKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>import/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return importKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>revision/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return revisionKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>date/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return dateKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>organization/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return organizationKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>contact/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return contactKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>description/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return descriptionKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>reference/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return referenceKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>extension/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return extensionKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>typedef/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return typedefKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>type/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return typeKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>parent/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return parentKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>identity/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return identityKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>class/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return classKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>extends/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return extendsKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>attribute/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return attributeKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>unique/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return uniqueKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>event/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return eventKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>format/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return formatKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>units/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return unitsKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>status/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return statusKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>access/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return accessKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>default/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return defaultKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>abnf/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return abnfKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  *Base types keywords
Packit Service 9ccfef
  */
Packit Service 9ccfef
<INITIAL>OctetString/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return OctetStringKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Pointer/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return PointerKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>ObjectIdentifier/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return ObjectIdentifierKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Integer32/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Integer32Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Integer64/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Integer64Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Unsigned32/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Unsigned32Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Unsigned64/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Unsigned64Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Float32/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Float32Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Float64/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Float64Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Float128/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return Float128Keyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Bits/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return BitsKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>Enumeration/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return EnumerationKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  *Status keywords
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>current/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return currentKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>deprecated/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return deprecatedKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>obsolete/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return obsoleteKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  *Access keywords
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>eventonly/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return eventonlyKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>readonly/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return readonlyKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>readwrite/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return readwriteKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  *Special floating point values' keywords
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>neginf/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return neginfKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>posinf/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return posinfKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>snan/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return snanKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>qnan/{delim} {
Packit Service 9ccfef
    yylval.id = yytext;
Packit Service 9ccfef
    return qnanKeyword;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for identifiers.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
 /* e.g. module names: REF: draft,p.12-13 */
Packit Service 9ccfef
<INITIAL>[A-Z](-?[a-zA-Z0-9_]+)*-? {
Packit Service 9ccfef
    if (yytext[yyleng-1] == '-') {
Packit Service 9ccfef
	smiPrintError(parser, ERR_ID_ENDS_IN_HYPHEN, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (yyleng > 64) {
Packit Service 9ccfef
	smiPrintError(parser, ERR_UCIDENTIFIER_64, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (strchr(yytext, '_')) {
Packit Service 9ccfef
        smiPrintError(parser, ERR_UNDERSCORE_IN_IDENTIFIER, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    yylval.text = smiStrdup(yytext);
Packit Service 9ccfef
    return ucIdentifier;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /* same for lowercase names */
Packit Service 9ccfef
<INITIAL>[a-z](-?[a-zA-Z0-9_]+)*-? {
Packit Service 9ccfef
    if (yytext[yyleng-1] == '-') {
Packit Service 9ccfef
	smiPrintError(parser, ERR_ID_ENDS_IN_HYPHEN, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (yyleng > 64) {
Packit Service 9ccfef
	smiPrintError(parser, ERR_LCIDENTIFIER_64, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    if (strchr(yytext, '_')) {
Packit Service 9ccfef
        smiPrintError(parser, ERR_UNDERSCORE_IN_IDENTIFIER, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    yylval.text = smiStrdup(yytext);
Packit Service 9ccfef
    return lcIdentifier;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for numbers.
Packit Service 9ccfef
  *
Packit Service 9ccfef
  * NOTE: `-' is a separate token. Hence, there are no negative numbers.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>0+/[0-9] {
Packit Service 9ccfef
    smiPrintError(parser, ERR_LEADING_ZEROS);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>([1-9][0-9]*|0)/[^0-9] {
Packit Service 9ccfef
    if ((yyleng > sizeof(MAX_NUMBER)-1) ||
Packit Service 9ccfef
	((yyleng == sizeof(MAX_NUMBER)-1) &&
Packit Service 9ccfef
	 (strcmp(yytext, MAX_NUMBER) > 0))) {
Packit Service 9ccfef
	smiPrintError(parser, ERR_NUMBER_TOO_LARGE, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    yylval.text = yytext;
Packit Service 9ccfef
    return decimalNumber;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>0x[0-9a-fA-F]+/[^0-9a-fA-F] {
Packit Service 9ccfef
    if (yyleng % 2) {
Packit Service 9ccfef
	smiPrintError(parser, ERR_HEX_STRING_MUL2, yytext);
Packit Service 9ccfef
    }
Packit Service 9ccfef
    yylval.text = yytext;
Packit Service 9ccfef
    return hexadecimalNumber;
Packit Service 9ccfef
}
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for floating point values.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>([0-9]*\.[0-9]+([eE][+-]?[0-9]+)?)/[^0-9] {
Packit Service 9ccfef
    yylval.text = yytext;
Packit Service 9ccfef
    return floatValue;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for OID's.
Packit Service 9ccfef
  */
Packit Service 9ccfef
  
Packit Service 9ccfef
<INITIAL>([0-9A-Za-z]-?)+\.([0-9A-Za-z]-?)+\.([0-9A-Za-z]-?)+(\.([0-9A-Za-z]-?)+)*/([^0-9A-Za-z]) {
Packit Service 9ccfef
    yylval.text = yytext;
Packit Service 9ccfef
    return OID;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Lex rules for textSegments.
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
<INITIAL>\"([^\"]|(\\\"))*\" {
Packit Service 9ccfef
    char *s, *d;		/* the source and destination pointer */
Packit Service 9ccfef
    int column = 0;		/* the current column */
Packit Service 9ccfef
    int newlineflag = 0;	/* we have just passed a newline */
Packit Service 9ccfef
    int cutoffcolumn = 0;	/* cut off white space up to this column */
Packit Service 9ccfef
				/* (computed by caculating the indentation */
Packit Service 9ccfef
				/* of the first column) */
Packit Service 9ccfef
Packit Service 9ccfef
    yytext[yyleng-1] = '\0';
Packit Service 9ccfef
    for (d = yytext, s = yytext+1; s[0]; s++, d++) {
Packit Service 9ccfef
Packit Service 9ccfef
	if ((s[0] == '\n' && s[1] == '\r')	/* newline sequence */
Packit Service 9ccfef
	    || (s[0] == '\r' && s[1] == '\n')) {
Packit Service 9ccfef
	    thisParser.line += 1;
Packit Service 9ccfef
	    d[0] = '\n';
Packit Service 9ccfef
	    s++;
Packit Service 9ccfef
	    newlineflag = 1;
Packit Service 9ccfef
	    column = 0;
Packit Service 9ccfef
	    if (cutoffcolumn < 0) cutoffcolumn = 0;
Packit Service 9ccfef
	} else if (s[0] == '\n') {		/* simple newline */
Packit Service 9ccfef
	    thisParser.line += 1;
Packit Service 9ccfef
	    d[0] = '\n';
Packit Service 9ccfef
	    newlineflag = 1;
Packit Service 9ccfef
	    column = 0;
Packit Service 9ccfef
	    if (cutoffcolumn < 0) cutoffcolumn = 0;
Packit Service 9ccfef
	} else {
Packit Service 9ccfef
	    if (newlineflag && isspace((int)(unsigned char)s[0])) {	/* space after newline */
Packit Service 9ccfef
		if (cutoffcolumn <= 0) {
Packit Service 9ccfef
		    cutoffcolumn -= (s[0] == '\t') ? (8-((column-1) % 8)) : 1;
Packit Service 9ccfef
		}
Packit Service 9ccfef
		column += (s[0] == '\t') ? (8-((column-1) % 8)) : 1;
Packit Service 9ccfef
		if (cutoffcolumn <= 0 || column <= cutoffcolumn) {
Packit Service 9ccfef
		    d--;
Packit Service 9ccfef
		} else {
Packit Service 9ccfef
		    d[0] = s[0];
Packit Service 9ccfef
		    newlineflag = 0;
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    } else {				/* everything else */
Packit Service 9ccfef
		if (! isascii(s[0])) {
Packit Service 9ccfef
		    smiPrintError(parser, ERR_ILLEGAL_CHAR_IN_STRING,
Packit Service 9ccfef
				  s[0], (unsigned char) s[0]);
Packit Service 9ccfef
		}
Packit Service 9ccfef
		d[0] = s[0];
Packit Service 9ccfef
		newlineflag = 0;
Packit Service 9ccfef
		if (cutoffcolumn < 0) {
Packit Service 9ccfef
		    cutoffcolumn *= -1;
Packit Service 9ccfef
		}
Packit Service 9ccfef
	    }
Packit Service 9ccfef
	}
Packit Service 9ccfef
    }
Packit Service 9ccfef
    d[0] = '\0';
Packit Service 9ccfef
Packit Service 9ccfef
    yylval.text = yytext;
Packit Service 9ccfef
    return textSegment;
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Skip the remainder of the line
Packit Service 9ccfef
  */
Packit Service 9ccfef
<Skipline>.*{lineBreak} {
Packit Service 9ccfef
    thisParser.line++;
Packit Service 9ccfef
    BEGIN(INITIAL);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
 /*
Packit Service 9ccfef
  * Everything else...
Packit Service 9ccfef
  */
Packit Service 9ccfef
Packit Service 9ccfef
. {
Packit Service 9ccfef
    smiPrintError(parser, ERR_LEX_UNEXPECTED_CHAR);
Packit Service 9ccfef
    BEGIN(Skipline);
Packit Service 9ccfef
}
Packit Service 9ccfef
Packit Service 9ccfef
%%
Packit Service 9ccfef
Packit Service 9ccfef
#endif