|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* parser-sming.y --
|
|
Packit Service |
9ccfef |
*
|
|
Packit Service |
9ccfef |
* Syntax rules for parsing 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: parser-sming.y 7966 2008-03-27 21:25:52Z schoenw $
|
|
Packit Service |
9ccfef |
*/
|
|
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 |
#define _ISOC99_SOURCE
|
|
Packit Service |
9ccfef |
#include <stdio.h>
|
|
Packit Service |
9ccfef |
#include <errno.h>
|
|
Packit Service |
9ccfef |
#include <stdlib.h>
|
|
Packit Service |
9ccfef |
#include <string.h>
|
|
Packit Service |
9ccfef |
#include <ctype.h>
|
|
Packit Service |
9ccfef |
#include <time.h>
|
|
Packit Service |
9ccfef |
#include <limits.h>
|
|
Packit Service |
9ccfef |
#include <float.h>
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#if defined(_MSC_VER)
|
|
Packit Service |
9ccfef |
#include <malloc.h>
|
|
Packit Service |
9ccfef |
#endif
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#ifdef HAVE_WIN_H
|
|
Packit Service |
9ccfef |
#include "win.h"
|
|
Packit Service |
9ccfef |
#endif
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#include "smi.h"
|
|
Packit Service |
9ccfef |
#include "error.h"
|
|
Packit Service |
9ccfef |
#include "parser-sming.h"
|
|
Packit Service |
9ccfef |
#include "scanner-sming.h"
|
|
Packit Service |
9ccfef |
#include "data.h"
|
|
Packit Service |
9ccfef |
#include "check.h"
|
|
Packit Service |
9ccfef |
#include "util.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 |
* These arguments are passed to yyparse() and yylex().
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
#define YYPARSE_PARAM parserPtr
|
|
Packit Service |
9ccfef |
#define YYLEX_PARAM parserPtr
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#define thisParserPtr ((Parser *)parserPtr)
|
|
Packit Service |
9ccfef |
#define thisModulePtr (((Parser *)parserPtr)->modulePtr)
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* NOTE: The argument lvalp ist not really a void pointer. Unfortunately,
|
|
Packit Service |
9ccfef |
* we don't know it better at this point. bison generated C code declares
|
|
Packit Service |
9ccfef |
* YYSTYPE just a few lines below based on the `%union' declaration.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
extern int yylex(void *lvalp, Parser *parserPtr);
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static char *typeIdentifier, *macroIdentifier, *identityIdentifier,
|
|
Packit Service |
9ccfef |
*classIdentifier, *attributeIdentifier;
|
|
Packit Service |
9ccfef |
static char *importModulename = NULL;
|
|
Packit Service |
9ccfef |
static Type *typePtr = NULL;
|
|
Packit Service |
9ccfef |
static Macro *macroPtr = NULL;
|
|
Packit Service |
9ccfef |
static Identity *identityPtr = NULL;
|
|
Packit Service |
9ccfef |
static Class *classPtr = NULL;
|
|
Packit Service |
9ccfef |
static Attribute *attributePtr = NULL;
|
|
Packit Service |
9ccfef |
static Event *eventPtr = NULL;
|
|
Packit Service |
9ccfef |
static SmiBasetype defaultBasetype = SMI_BASETYPE_UNKNOWN;
|
|
Packit Service |
9ccfef |
static NamedNumber *namedNumberPtr = NULL;
|
|
Packit Service |
9ccfef |
static int bitsFlag = 0; /* used to differentiate bits definition from enum*/
|
|
Packit Service |
9ccfef |
static int attributeFlag = 0; /*
|
|
Packit Service |
9ccfef |
*Used to differentiate between attribute and
|
|
Packit Service |
9ccfef |
*and typedef to tie the type statement
|
|
Packit Service |
9ccfef |
*respectively to class or module.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#define SMI_EPOCH 631152000 /* 01 Jan 1990 00:00:00 */
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static Type *
|
|
Packit Service |
9ccfef |
findType(char *spec, Parser *parserPtr, Module *modulePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
Type *typePtr;
|
|
Packit Service |
9ccfef |
Import *importPtr;
|
|
Packit Service |
9ccfef |
char *module, *type;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
type = strstr(spec, "::");
|
|
Packit Service |
9ccfef |
if (!type) {
|
|
Packit Service |
9ccfef |
typePtr = findTypeByModuleAndName(modulePtr, spec);
|
|
Packit Service |
9ccfef |
if (!typePtr) {
|
|
Packit Service |
9ccfef |
importPtr = findImportByName(spec, modulePtr);
|
|
Packit Service |
9ccfef |
if (importPtr) {
|
|
Packit Service |
9ccfef |
typePtr = findTypeByModulenameAndName(importPtr->export.module,
|
|
Packit Service |
9ccfef |
spec);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
module = strtok(spec, ":");
|
|
Packit Service |
9ccfef |
type = &type[2];
|
|
Packit Service |
9ccfef |
typePtr = findTypeByModulenameAndName(module, type);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
return typePtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static Identity *
|
|
Packit Service |
9ccfef |
findIdentity(char *spec, Parser *parserPtr, Module *modulePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
Identity *identityPtr;
|
|
Packit Service |
9ccfef |
Import *importPtr;
|
|
Packit Service |
9ccfef |
char *module, *identity;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identity = strstr(spec, "::");
|
|
Packit Service |
9ccfef |
if (!identity) {
|
|
Packit Service |
9ccfef |
identityPtr = findIdentityByModuleAndName(modulePtr, spec);
|
|
Packit Service |
9ccfef |
if (!identityPtr) {
|
|
Packit Service |
9ccfef |
importPtr = findImportByName(spec, modulePtr);
|
|
Packit Service |
9ccfef |
if (importPtr) {
|
|
Packit Service |
9ccfef |
identityPtr = findIdentityByModulenameAndName(importPtr->export.module,
|
|
Packit Service |
9ccfef |
spec);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
module = strtok(spec, ":");
|
|
Packit Service |
9ccfef |
identity = &identity[2];
|
|
Packit Service |
9ccfef |
identityPtr = findIdentityByModulenameAndName(module, identity);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
return identityPtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static Class *
|
|
Packit Service |
9ccfef |
findClass(char *spec, Parser *parserPtr, Module *modulePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
Class *classPtr;
|
|
Packit Service |
9ccfef |
Import *importPtr;
|
|
Packit Service |
9ccfef |
char *module, *class;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
class = strstr(spec, "::");
|
|
Packit Service |
9ccfef |
if (!class) {
|
|
Packit Service |
9ccfef |
classPtr = findClassByModuleAndName(modulePtr, spec);
|
|
Packit Service |
9ccfef |
if (!classPtr) {
|
|
Packit Service |
9ccfef |
importPtr = findImportByName(spec, modulePtr);
|
|
Packit Service |
9ccfef |
if (importPtr) {
|
|
Packit Service |
9ccfef |
classPtr = findClassByModulenameAndName(importPtr->export.module,
|
|
Packit Service |
9ccfef |
spec);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
module = strtok(spec, ":");
|
|
Packit Service |
9ccfef |
class = &class[2];
|
|
Packit Service |
9ccfef |
classPtr = findClassByModulenameAndName(module, class);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
return classPtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static void
|
|
Packit Service |
9ccfef |
checkTypes(Parser *parserPtr, Module *modulePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
Type *typePtr;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
for(typePtr = modulePtr->firstTypePtr;
|
|
Packit Service |
9ccfef |
typePtr; typePtr = typePtr->nextPtr) {
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Complain about empty description clauses.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (! parserPtr->flags & SMI_FLAG_NODESCR
|
|
Packit Service |
9ccfef |
&& (! typePtr->export.description
|
|
Packit Service |
9ccfef |
|| ! typePtr->export.description[0])) {
|
|
Packit Service |
9ccfef |
smiPrintErrorAtLine(parserPtr, ERR_EMPTY_DESCRIPTION,
|
|
Packit Service |
9ccfef |
typePtr->line, typePtr->export.name);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
smiCheckNamedNumberRedefinition(parserPtr, typePtr);
|
|
Packit Service |
9ccfef |
smiCheckNamedNumberSubtyping(parserPtr, typePtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static time_t
|
|
Packit Service |
9ccfef |
checkDate(Parser *parserPtr, char *date)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
struct tm tm;
|
|
Packit Service |
9ccfef |
time_t anytime;
|
|
Packit Service |
9ccfef |
int i, len;
|
|
Packit Service |
9ccfef |
char *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
memset(&tm, 0, sizeof(tm));
|
|
Packit Service |
9ccfef |
anytime = 0;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
len = strlen(date);
|
|
Packit Service |
9ccfef |
if (len == 10 || len == 16) {
|
|
Packit Service |
9ccfef |
for (i = 0; i < len; i++) {
|
|
Packit Service |
9ccfef |
if (((i < 4 || i == 5 || i == 6 || i == 8 || i == 9 || i == 11
|
|
Packit Service |
9ccfef |
|| i == 12 || i == 14 || i == 15) && ! isdigit((int)date[i]))
|
|
Packit Service |
9ccfef |
|| ((i == 4 || i == 7) && date[i] != '-')
|
|
Packit Service |
9ccfef |
|| (i == 10 && date[i] != ' ')
|
|
Packit Service |
9ccfef |
|| (i == 13 && date[i] != ':')) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_CHARACTER, date);
|
|
Packit Service |
9ccfef |
anytime = (time_t) -1;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_LENGTH, date);
|
|
Packit Service |
9ccfef |
anytime = (time_t) -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (anytime == 0) {
|
|
Packit Service |
9ccfef |
for (i = 0, p = date, tm.tm_year = 0; i < 4; i++, p++) {
|
|
Packit Service |
9ccfef |
tm.tm_year = tm.tm_year * 10 + (*p - '0');
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
p++;
|
|
Packit Service |
9ccfef |
tm.tm_mon = (p[0]-'0') * 10 + (p[1]-'0');
|
|
Packit Service |
9ccfef |
p += 3;
|
|
Packit Service |
9ccfef |
tm.tm_mday = (p[0]-'0') * 10 + (p[1]-'0');
|
|
Packit Service |
9ccfef |
p += 2;
|
|
Packit Service |
9ccfef |
if (len == 16) {
|
|
Packit Service |
9ccfef |
p++;
|
|
Packit Service |
9ccfef |
tm.tm_hour = (p[0]-'0') * 10 + (p[1]-'0');
|
|
Packit Service |
9ccfef |
p += 3;
|
|
Packit Service |
9ccfef |
tm.tm_min = (p[0]-'0') * 10 + (p[1]-'0');
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (tm.tm_mon < 1 || tm.tm_mon > 12) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_MONTH, date);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
if (tm.tm_mday < 1 || tm.tm_mday > 31) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_DAY, date);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
if (tm.tm_hour < 0 || tm.tm_hour > 23) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_HOUR, date);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
if (tm.tm_min < 0 || tm.tm_min > 59) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_MINUTES, date);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
tm.tm_year -= 1900;
|
|
Packit Service |
9ccfef |
tm.tm_mon -= 1;
|
|
Packit Service |
9ccfef |
tm.tm_isdst = 0;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
anytime = timegm(&tm;;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (anytime == (time_t) -1) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_VALUE, date);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
if (anytime < SMI_EPOCH) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_IN_PAST, date);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
if (anytime > time(NULL)) {
|
|
Packit Service |
9ccfef |
smiPrintError(parserPtr, ERR_DATE_IN_FUTURE, date);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
return (anytime == (time_t) -1) ? 0 : anytime;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static char *hexToStr(char *hexStr, int len)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
union{
|
|
Packit Service |
9ccfef |
char ch;
|
|
Packit Service |
9ccfef |
long l;
|
|
Packit Service |
9ccfef |
} hex2char;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
char* res =(char*)malloc(sizeof(char)*len/2+1);
|
|
Packit Service |
9ccfef |
char* tmp =(char*)malloc(sizeof(char)*3);
|
|
Packit Service |
9ccfef |
int i,j = 0;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
tmp[2]=0;
|
|
Packit Service |
9ccfef |
for(i=2; i+1
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
tmp[0]= hexStr[i];
|
|
Packit Service |
9ccfef |
tmp[1]= hexStr[i+1];
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
hex2char.l = strtol(tmp,NULL,16);
|
|
Packit Service |
9ccfef |
res[j] = hex2char.ch;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
j++;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
smiFree(tmp);
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
res[j]=0;
|
|
Packit Service |
9ccfef |
return res;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static void createBitsValue(SmiValue *valuePtr, Type *typePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *bitsListPtr, *valueListPtr, *p, *pp, *nextPtr;
|
|
Packit Service |
9ccfef |
int nBits, bit;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (valuePtr->basetype != SMI_BASETYPE_BITS)
|
|
Packit Service |
9ccfef |
return;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsListPtr = typePtr->listPtr;
|
|
Packit Service |
9ccfef |
valueListPtr = (void *)valuePtr->value.ptr;
|
|
Packit Service |
9ccfef |
for (nBits = 0, p = bitsListPtr; p; p = p->nextPtr) {
|
|
Packit Service |
9ccfef |
if (nBits < 1+((NamedNumber *)(p->ptr))->export.value.value.unsigned64) {
|
|
Packit Service |
9ccfef |
nBits = 1+((NamedNumber *)(p->ptr))->export.value.value.unsigned64;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
valuePtr->value.ptr = smiMalloc((nBits+7)/8);
|
|
Packit Service |
9ccfef |
memset(valuePtr->value.ptr, 0, (nBits+7)/8);
|
|
Packit Service |
9ccfef |
valuePtr->len = (nBits+7)/8;
|
|
Packit Service |
9ccfef |
for (p = valueListPtr; p;) {
|
|
Packit Service |
9ccfef |
for (pp = bitsListPtr; pp; pp = pp->nextPtr) {
|
|
Packit Service |
9ccfef |
if (!strcmp(p->ptr,
|
|
Packit Service |
9ccfef |
((NamedNumber *)(pp->ptr))->export.name)) {
|
|
Packit Service |
9ccfef |
bit = (int)(((NamedNumber *)(pp->ptr))->export.value.value.unsigned64);
|
|
Packit Service |
9ccfef |
valuePtr->value.ptr[bit/8] |=
|
|
Packit Service |
9ccfef |
1 << (7-(bit%8));
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
smiFree(p->ptr);
|
|
Packit Service |
9ccfef |
nextPtr = p->nextPtr;
|
|
Packit Service |
9ccfef |
smiFree(p);
|
|
Packit Service |
9ccfef |
p = nextPtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* The grammars start symbol.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
%start smingFile
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* We call the parser from within the parser when IMPORTing modules,
|
|
Packit Service |
9ccfef |
* hence we need reentrant parser code. This is a bison feature.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
%pure_parser
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* The attributes.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
%union {
|
|
Packit Service |
9ccfef |
char *id; /* identifier name */
|
|
Packit Service |
9ccfef |
int rc; /* >=0: ok, <0: error */
|
|
Packit Service |
9ccfef |
time_t date; /* a date value */
|
|
Packit Service |
9ccfef |
char *text;
|
|
Packit Service |
9ccfef |
Module *modulePtr;
|
|
Packit Service |
9ccfef |
Node *nodePtr;
|
|
Packit Service |
9ccfef |
Object *objectPtr;
|
|
Packit Service |
9ccfef |
Identity *identityPtr;
|
|
Packit Service |
9ccfef |
Macro *macroPtr;
|
|
Packit Service |
9ccfef |
Type *typePtr;
|
|
Packit Service |
9ccfef |
Class *classPtr;
|
|
Packit Service |
9ccfef |
Attribute *attributePtr;
|
|
Packit Service |
9ccfef |
Event *eventPtr;
|
|
Packit Service |
9ccfef |
Index index;
|
|
Packit Service |
9ccfef |
Option *optionPtr;
|
|
Packit Service |
9ccfef |
Refinement *refinementPtr;
|
|
Packit Service |
9ccfef |
SmiStatus status;
|
|
Packit Service |
9ccfef |
SmiAccess access;
|
|
Packit Service |
9ccfef |
NamedNumber *namedNumberPtr;
|
|
Packit Service |
9ccfef |
Range *rangePtr;
|
|
Packit Service |
9ccfef |
SmiValue *valuePtr;
|
|
Packit Service |
9ccfef |
List *listPtr;
|
|
Packit Service |
9ccfef |
Revision *revisionPtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Tokens and their attributes.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
%token DOT
|
|
Packit Service |
9ccfef |
%token DOT_DOT
|
|
Packit Service |
9ccfef |
%token COLON_COLON
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%token <text>ucIdentifier
|
|
Packit Service |
9ccfef |
%token <text>lcIdentifier
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%token <text>floatValue
|
|
Packit Service |
9ccfef |
%token <text>textSegment
|
|
Packit Service |
9ccfef |
%token <text>decimalNumber
|
|
Packit Service |
9ccfef |
%token <text>hexadecimalNumber
|
|
Packit Service |
9ccfef |
%token <text>OID
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%token <rc>moduleKeyword
|
|
Packit Service |
9ccfef |
%token <rc>importKeyword
|
|
Packit Service |
9ccfef |
%token <rc>revisionKeyword
|
|
Packit Service |
9ccfef |
%token <rc>identityKeyword
|
|
Packit Service |
9ccfef |
%token <rc>oidKeyword
|
|
Packit Service |
9ccfef |
%token <rc>dateKeyword
|
|
Packit Service |
9ccfef |
%token <rc>organizationKeyword
|
|
Packit Service |
9ccfef |
%token <rc>contactKeyword
|
|
Packit Service |
9ccfef |
%token <rc>descriptionKeyword
|
|
Packit Service |
9ccfef |
%token <rc>referenceKeyword
|
|
Packit Service |
9ccfef |
%token <rc>extensionKeyword
|
|
Packit Service |
9ccfef |
%token <rc>typedefKeyword
|
|
Packit Service |
9ccfef |
%token <rc>typeKeyword
|
|
Packit Service |
9ccfef |
%token <rc>formatKeyword
|
|
Packit Service |
9ccfef |
%token <rc>unitsKeyword
|
|
Packit Service |
9ccfef |
%token <rc>statusKeyword
|
|
Packit Service |
9ccfef |
%token <rc>accessKeyword
|
|
Packit Service |
9ccfef |
%token <rc>defaultKeyword
|
|
Packit Service |
9ccfef |
%token <rc>impliedKeyword
|
|
Packit Service |
9ccfef |
%token <rc>indexKeyword
|
|
Packit Service |
9ccfef |
%token <rc>augmentsKeyword
|
|
Packit Service |
9ccfef |
%token <rc>reordersKeyword
|
|
Packit Service |
9ccfef |
%token <rc>sparseKeyword
|
|
Packit Service |
9ccfef |
%token <rc>expandsKeyword
|
|
Packit Service |
9ccfef |
%token <rc>createKeyword
|
|
Packit Service |
9ccfef |
%token <rc>membersKeyword
|
|
Packit Service |
9ccfef |
%token <rc>objectsKeyword
|
|
Packit Service |
9ccfef |
%token <rc>mandatoryKeyword
|
|
Packit Service |
9ccfef |
%token <rc>optionalKeyword
|
|
Packit Service |
9ccfef |
%token <rc>refineKeyword
|
|
Packit Service |
9ccfef |
%token <rc>abnfKeyword
|
|
Packit Service |
9ccfef |
%token <rc>OctetStringKeyword
|
|
Packit Service |
9ccfef |
%token <rc>ObjectIdentifierKeyword
|
|
Packit Service |
9ccfef |
%token <rc>Integer32Keyword
|
|
Packit Service |
9ccfef |
%token <rc>Unsigned32Keyword
|
|
Packit Service |
9ccfef |
%token <rc>Integer64Keyword
|
|
Packit Service |
9ccfef |
%token <rc>Unsigned64Keyword
|
|
Packit Service |
9ccfef |
%token <rc>Float32Keyword
|
|
Packit Service |
9ccfef |
%token <rc>Float64Keyword
|
|
Packit Service |
9ccfef |
%token <rc>Float128Keyword
|
|
Packit Service |
9ccfef |
%token <rc>BitsKeyword
|
|
Packit Service |
9ccfef |
%token <rc>EnumerationKeyword
|
|
Packit Service |
9ccfef |
%token <rc>currentKeyword
|
|
Packit Service |
9ccfef |
%token <rc>deprecatedKeyword
|
|
Packit Service |
9ccfef |
%token <rc>obsoleteKeyword
|
|
Packit Service |
9ccfef |
%token <rc>readonlyKeyword
|
|
Packit Service |
9ccfef |
%token <rc>readwriteKeyword
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%token <rc>parentKeyword
|
|
Packit Service |
9ccfef |
%token <rc>classKeyword
|
|
Packit Service |
9ccfef |
%token <rc>extendsKeyword
|
|
Packit Service |
9ccfef |
%token <rc>attributeKeyword
|
|
Packit Service |
9ccfef |
%token <rc>uniqueKeyword
|
|
Packit Service |
9ccfef |
%token <rc>eventKeyword
|
|
Packit Service |
9ccfef |
%token <rc>PointerKeyword
|
|
Packit Service |
9ccfef |
%token <rc>eventonlyKeyword
|
|
Packit Service |
9ccfef |
%token <rc>neginfKeyword
|
|
Packit Service |
9ccfef |
%token <rc>posinfKeyword
|
|
Packit Service |
9ccfef |
%token <rc>snanKeyword
|
|
Packit Service |
9ccfef |
%token <rc>qnanKeyword
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Types of non-terminal symbols.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%type <rc>smingFile
|
|
Packit Service |
9ccfef |
%type <rc>moduleStatement_optsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>moduleStatement_optsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>moduleStatement_optsep
|
|
Packit Service |
9ccfef |
%type <modulePtr>moduleStatement
|
|
Packit Service |
9ccfef |
%type <rc>extensionStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>extensionStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>extensionStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <macroPtr>extensionStatement
|
|
Packit Service |
9ccfef |
%type <rc>identityStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>identityStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>identityStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <identityPtr>identityStatement
|
|
Packit Service |
9ccfef |
%type <identityPtr>parentStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <identityPtr>parentStatement
|
|
Packit Service |
9ccfef |
%type <rc>typedefStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>typedefStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>typedefStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <typePtr>typedefStatement
|
|
Packit Service |
9ccfef |
%type <rc>attributeStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>attributeStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>attributeStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <attributePtr>attributeStatement
|
|
Packit Service |
9ccfef |
%type <rc>eventStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>eventStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>eventStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <eventPtr>eventStatement
|
|
Packit Service |
9ccfef |
%type <rc>classStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>classStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>classStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <classPtr>classStatement
|
|
Packit Service |
9ccfef |
%type <classPtr>extendsStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <classPtr>extendsStatement
|
|
Packit Service |
9ccfef |
%type <rc>importStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>importStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>importStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <listPtr>importStatement
|
|
Packit Service |
9ccfef |
%type <rc>revisionStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
%type <rc>revisionStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
%type <rc>revisionStatement_stmtsep
|
|
Packit Service |
9ccfef |
%type <revisionPtr>revisionStatement
|
|
Packit Service |
9ccfef |
%type <typePtr>typedefTypeStatement
|
|
Packit Service |
9ccfef |
%type <attributePtr>attributeTypeStatement
|
|
Packit Service |
9ccfef |
%type <date>dateStatement
|
|
Packit Service |
9ccfef |
%type <text>organizationStatement
|
|
Packit Service |
9ccfef |
%type <text>contactStatement
|
|
Packit Service |
9ccfef |
%type <text>formatStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <text>formatStatement
|
|
Packit Service |
9ccfef |
%type <text>unitsStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <text>unitsStatement
|
|
Packit Service |
9ccfef |
%type <status>statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <status>statusStatement
|
|
Packit Service |
9ccfef |
%type <valuePtr>defaultStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <valuePtr>defaultStatement
|
|
Packit Service |
9ccfef |
%type <access>accessStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <access>accessStatement
|
|
Packit Service |
9ccfef |
%type <access>access
|
|
Packit Service |
9ccfef |
%type <text>descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <text>descriptionStatement
|
|
Packit Service |
9ccfef |
%type <text>referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <text>referenceStatement
|
|
Packit Service |
9ccfef |
%type <text>abnfStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <text>abnfStatement
|
|
Packit Service |
9ccfef |
%type <typePtr>refinedBaseType_refinedType
|
|
Packit Service |
9ccfef |
%type <typePtr>refinedBaseType
|
|
Packit Service |
9ccfef |
%type <typePtr>refinedType
|
|
Packit Service |
9ccfef |
%type <attributePtr>attribute_refinedBaseType_refinedType
|
|
Packit Service |
9ccfef |
%type <attributePtr>attribute_refinedBaseType
|
|
Packit Service |
9ccfef |
%type <attributePtr>attribute_refinedType
|
|
Packit Service |
9ccfef |
%type <listPtr>optsep_anySpec_01
|
|
Packit Service |
9ccfef |
%type <listPtr>anySpec
|
|
Packit Service |
9ccfef |
%type <listPtr>optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
%type <listPtr>numberSpec
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherNumberElement_0n
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherNumberElement_1n
|
|
Packit Service |
9ccfef |
%type <rangePtr>furtherNumberElement
|
|
Packit Service |
9ccfef |
%type <rangePtr>numberElement
|
|
Packit Service |
9ccfef |
%type <valuePtr>numberUpperLimit_01
|
|
Packit Service |
9ccfef |
%type <valuePtr>numberUpperLimit
|
|
Packit Service |
9ccfef |
%type <listPtr>optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
%type <listPtr>floatSpec
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherFloatElement_0n
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherFloatElement_1n
|
|
Packit Service |
9ccfef |
%type <rangePtr>furtherFloatElement
|
|
Packit Service |
9ccfef |
%type <rangePtr>floatElement
|
|
Packit Service |
9ccfef |
%type <text>floatUpperLimit_01
|
|
Packit Service |
9ccfef |
%type <text>floatUpperLimit
|
|
Packit Service |
9ccfef |
%type <text>specialFloatValue
|
|
Packit Service |
9ccfef |
%type <listPtr>optsep_pointerRestr_01
|
|
Packit Service |
9ccfef |
%type <text>pointerRestr
|
|
Packit Service |
9ccfef |
%type <listPtr>bitsOrEnumerationSpec
|
|
Packit Service |
9ccfef |
%type <listPtr>bitsOrEnumerationList
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherBitsOrEnumerationItem_0n
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherBitsOrEnumerationItem_1n
|
|
Packit Service |
9ccfef |
%type <namedNumberPtr>furtherBitsOrEnumerationItem
|
|
Packit Service |
9ccfef |
%type <namedNumberPtr>bitsOrEnumerationItem
|
|
Packit Service |
9ccfef |
%type <listPtr>identifierList
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherIdentifier_0n
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherIdentifier_1n
|
|
Packit Service |
9ccfef |
%type <text>furtherIdentifier
|
|
Packit Service |
9ccfef |
%type <listPtr>uniqueStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
%type <listPtr>uniqueStatement
|
|
Packit Service |
9ccfef |
%type <listPtr>uniqueSpec
|
|
Packit Service |
9ccfef |
%type <listPtr>bitsValue
|
|
Packit Service |
9ccfef |
%type <listPtr>bitsList
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherLcIdentifier_0n
|
|
Packit Service |
9ccfef |
%type <listPtr>furtherLcIdentifier_1n
|
|
Packit Service |
9ccfef |
%type <text>furtherLcIdentifier
|
|
Packit Service |
9ccfef |
%type <text>identifier
|
|
Packit Service |
9ccfef |
%type <text>qucIdentifier
|
|
Packit Service |
9ccfef |
%type <text>qlcIdentifier
|
|
Packit Service |
9ccfef |
%type <text>text
|
|
Packit Service |
9ccfef |
%type <text>optsep_textSegment_0n
|
|
Packit Service |
9ccfef |
%type <text>optsep_textSegment_1n
|
|
Packit Service |
9ccfef |
%type <text>optsep_textSegment
|
|
Packit Service |
9ccfef |
%type <date>date
|
|
Packit Service |
9ccfef |
%type <text>format
|
|
Packit Service |
9ccfef |
%type <text>units
|
|
Packit Service |
9ccfef |
%type <valuePtr>anyValue
|
|
Packit Service |
9ccfef |
%type <status>status
|
|
Packit Service |
9ccfef |
%type <valuePtr>number
|
|
Packit Service |
9ccfef |
%type <valuePtr>negativeNumber
|
|
Packit Service |
9ccfef |
%type <valuePtr>signedNumber
|
|
Packit Service |
9ccfef |
%type <rc>optsep_comma_01
|
|
Packit Service |
9ccfef |
%type <rc>sep
|
|
Packit Service |
9ccfef |
%type <rc>optsep
|
|
Packit Service |
9ccfef |
%type <rc>stmtsep
|
|
Packit Service |
9ccfef |
%type <text>qOID
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%%
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Yacc rules.
|
|
Packit Service |
9ccfef |
*
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* One mibFile may contain multiple MIB modules.
|
|
Packit Service |
9ccfef |
* It's also possible that there's no module in a file.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
smingFile: optsep moduleStatement_optsep_0n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed modules.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
moduleStatement_optsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| moduleStatement_optsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
moduleStatement_optsep_1n: moduleStatement_optsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| moduleStatement_optsep_1n moduleStatement_optsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* modules or return -1, if at least one
|
|
Packit Service |
9ccfef |
* module failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
moduleStatement_optsep: moduleStatement optsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Module *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1 != NULL) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
moduleStatement: moduleKeyword sep ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
thisParserPtr->modulePtr = findModuleByName($3);
|
|
Packit Service |
9ccfef |
if (!thisParserPtr->modulePtr) {
|
|
Packit Service |
9ccfef |
thisParserPtr->modulePtr =
|
|
Packit Service |
9ccfef |
addModule($3,
|
|
Packit Service |
9ccfef |
smiStrdup(thisParserPtr->path),
|
|
Packit Service |
9ccfef |
0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_MODULE_ALREADY_LOADED,
|
|
Packit Service |
9ccfef |
$3);
|
|
Packit Service |
9ccfef |
free($3);
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* this aborts parsing the whole file,
|
|
Packit Service |
9ccfef |
* not only the current module.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
YYABORT;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
thisModulePtr->export.language = SMI_LANGUAGE_SMING;
|
|
Packit Service |
9ccfef |
thisParserPtr->modulePtr->numImportedIdentifiers
|
|
Packit Service |
9ccfef |
= 0;
|
|
Packit Service |
9ccfef |
thisParserPtr->modulePtr->numStatements = 0;
|
|
Packit Service |
9ccfef |
thisParserPtr->modulePtr->numModuleIdentities = 0;
|
|
Packit Service |
9ccfef |
thisParserPtr->firstIndexlabelPtr = NULL;
|
|
Packit Service |
9ccfef |
thisParserPtr->identityObjectName = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
importStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
organizationStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if ($9) {
|
|
Packit Service |
9ccfef |
setModuleOrganization(thisParserPtr->modulePtr,
|
|
Packit Service |
9ccfef |
$9);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
contactStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if ($12) {
|
|
Packit Service |
9ccfef |
setModuleContactInfo(thisParserPtr->modulePtr,
|
|
Packit Service |
9ccfef |
$12);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if ($15) {
|
|
Packit Service |
9ccfef |
setModuleDescription(thisParserPtr->modulePtr,
|
|
Packit Service |
9ccfef |
$15, thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if ($18) {
|
|
Packit Service |
9ccfef |
setModuleReference(thisParserPtr->modulePtr,
|
|
Packit Service |
9ccfef |
$18, thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
revisionStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
extensionStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
identityStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
typedefStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
classStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
checkTypes(thisParserPtr, thisModulePtr);
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = thisModulePtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
extensionStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| extensionStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed extension statements.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
extensionStatement_stmtsep_1n: extensionStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| extensionStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
extensionStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* extensions or return -1, if at least one
|
|
Packit Service |
9ccfef |
* failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
extensionStatement_stmtsep: extensionStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Type *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
extensionStatement: extensionKeyword sep lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
macroIdentifier = $3;
|
|
Packit Service |
9ccfef |
macroPtr = addMacro(macroIdentifier,
|
|
Packit Service |
9ccfef |
0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setMacroDecl(macroPtr, SMI_DECL_EXTENSION);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (macroPtr && $8) {
|
|
Packit Service |
9ccfef |
setMacroStatus(macroPtr, $8);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (macroPtr && $10) {
|
|
Packit Service |
9ccfef |
setMacroDescription(macroPtr, $10,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (macroPtr && $12) {
|
|
Packit Service |
9ccfef |
setMacroReference(macroPtr, $12,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
abnfStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (macroPtr && $14) {
|
|
Packit Service |
9ccfef |
setMacroAbnf(macroPtr, $14,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
macroPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
typedefStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| typedefStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed typedef statements.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
typedefStatement_stmtsep_1n: typedefStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| typedefStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
typedefStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* typedefs or return -1, if at least one
|
|
Packit Service |
9ccfef |
* failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
typedefStatement_stmtsep: typedefStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Type *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
typedefStatement: typedefKeyword sep ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
typeIdentifier = $3;
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
*check for duplicate names in the module
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if(typePtr =
|
|
Packit Service |
9ccfef |
findType(typeIdentifier, thisParserPtr,thisModulePtr))
|
|
Packit Service |
9ccfef |
if( typePtr->modulePtr == thisParserPtr->modulePtr)
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_DUPLICATE_TYPE_NAME,
|
|
Packit Service |
9ccfef |
typeIdentifier);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
typedefTypeStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if ($8) {
|
|
Packit Service |
9ccfef |
if ($8->export.name) {
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If the exact type has been found
|
|
Packit Service |
9ccfef |
* and no new Type structure has been
|
|
Packit Service |
9ccfef |
* created, we have to create a
|
|
Packit Service |
9ccfef |
* duplicate now.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
typePtr = duplicateType($8, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
typePtr = $8;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
typePtr = setTypeName(typePtr, typeIdentifier);
|
|
Packit Service |
9ccfef |
setTypeDecl(typePtr, SMI_DECL_TYPEDEF);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
defaultBasetype = typePtr->export.basetype;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
defaultStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (typePtr && $11) {
|
|
Packit Service |
9ccfef |
if(typePtr->export.basetype ==
|
|
Packit Service |
9ccfef |
SMI_BASETYPE_ENUM)
|
|
Packit Service |
9ccfef |
//check ENUM value for correctness
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($11->len)
|
|
Packit Service |
9ccfef |
if(namedNumberPtr = findNamedNumberByName(typePtr,
|
|
Packit Service |
9ccfef |
$11->value.ptr)){
|
|
Packit Service |
9ccfef |
smiFree($11);
|
|
Packit Service |
9ccfef |
$11 = &namedNumberPtr->export.value;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else{ smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ENUM_NAME_NOT_DEFINED,
|
|
Packit Service |
9ccfef |
$11->value.ptr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
//NOTE that the bits default value is set in the anyval
|
|
Packit Service |
9ccfef |
//rule
|
|
Packit Service |
9ccfef |
setTypeValue(typePtr, $11);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
formatStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (typePtr && $13
|
|
Packit Service |
9ccfef |
&& smiCheckFormat(thisParserPtr,
|
|
Packit Service |
9ccfef |
typePtr->export.basetype,
|
|
Packit Service |
9ccfef |
$13, 0)) {
|
|
Packit Service |
9ccfef |
setTypeFormat(typePtr, $13);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
unitsStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (typePtr && $15) {
|
|
Packit Service |
9ccfef |
setTypeUnits(typePtr, $15);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (typePtr && $17) {
|
|
Packit Service |
9ccfef |
setTypeStatus(typePtr, $17);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (typePtr && $19) {
|
|
Packit Service |
9ccfef |
setTypeDescription(typePtr, $19,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (typePtr && $21) {
|
|
Packit Service |
9ccfef |
setTypeReference(typePtr, $21, thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
smiCheckNamedNumberSubtyping(thisParserPtr , typePtr);
|
|
Packit Service |
9ccfef |
smiCheckNamedNumbersOrder(thisParserPtr , typePtr);
|
|
Packit Service |
9ccfef |
smiCheckNamedNumberRedefinition(thisParserPtr , typePtr);
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
typePtr = NULL;
|
|
Packit Service |
9ccfef |
free(typeIdentifier);
|
|
Packit Service |
9ccfef |
defaultBasetype = SMI_BASETYPE_UNKNOWN;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
classStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| classStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed typedef statements.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
classStatement_stmtsep_1n: classStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| classStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
classStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* classes or return -1, if at least one
|
|
Packit Service |
9ccfef |
* failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
classStatement_stmtsep: classStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Type *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
classStatement: classKeyword sep ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
classIdentifier = $3;
|
|
Packit Service |
9ccfef |
if(findClassByModuleAndName(thisModulePtr, classIdentifier))
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_DUPLICATE_CLASS_NAME,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else{
|
|
Packit Service |
9ccfef |
classPtr = addClass(classIdentifier,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setClassDecl(classPtr, SMI_DECL_CLASS);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
extendsStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if(classPtr && $8)
|
|
Packit Service |
9ccfef |
classPtr->parentPtr = $8;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
attributeStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
uniqueStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *tmpList;
|
|
Packit Service |
9ccfef |
Attribute *tmpAttribute;
|
|
Packit Service |
9ccfef |
if(classPtr && $11)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
//Check for "magic" value #@# that defines
|
|
Packit Service |
9ccfef |
//scalar class. See NOTE after Class definitino in data.h
|
|
Packit Service |
9ccfef |
if(!strcmp((char*)($11->ptr),"#@#"))
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
classPtr->uniqueList = (List*)malloc(sizeof(List));
|
|
Packit Service |
9ccfef |
classPtr->uniqueList->ptr = classPtr;
|
|
Packit Service |
9ccfef |
classPtr->uniqueList->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
smiFree($11);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
tmpList = $11;
|
|
Packit Service |
9ccfef |
//convert all attribute names to atributes
|
|
Packit Service |
9ccfef |
for(tmpList; tmpList; tmpList=tmpList->nextPtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if(tmpAttribute =
|
|
Packit Service |
9ccfef |
(Attribute*)smiGetAttribute(&(classPtr->export),(char*)(tmpList->ptr)))
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
smiFree(tmpList->ptr);
|
|
Packit Service |
9ccfef |
tmpList->ptr = tmpAttribute;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
smiFree(tmpList->ptr);
|
|
Packit Service |
9ccfef |
tmpList->ptr = NULL;
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ATTRIBUTE_NOT_FOUND,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
classPtr->uniqueList = $11;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
eventStatement_stmtsep_0n
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (classPtr && $14) {
|
|
Packit Service |
9ccfef |
setClassStatus(classPtr, $14);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (classPtr && $16) {
|
|
Packit Service |
9ccfef |
setClassDescription(classPtr, $16,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (classPtr && $18) {
|
|
Packit Service |
9ccfef |
setClassReference(classPtr, $18,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
classPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attributeStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| attributeStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed typedef statements.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attributeStatement_stmtsep_1n: attributeStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| attributeStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
attributeStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* attributes or return -1, if at least one
|
|
Packit Service |
9ccfef |
* failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attributeStatement_stmtsep: attributeStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Type *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attributeStatement: attributeKeyword sep lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
attributeIdentifier = $3;
|
|
Packit Service |
9ccfef |
attributePtr = (Attribute*)smiGetAttribute(&(classPtr->export),
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
if(attributePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_DUPLICATE_ATTRIBUTE_NAME,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
attributePtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
attributeTypeStatement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if ($8) {
|
|
Packit Service |
9ccfef |
attributePtr = $8;
|
|
Packit Service |
9ccfef |
setAttributeName(attributePtr,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
setAttributeDecl(attributePtr,
|
|
Packit Service |
9ccfef |
SMI_DECL_ATTRIBUTE);
|
|
Packit Service |
9ccfef |
defaultBasetype = attributePtr->export.basetype;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
accessStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($10 && attributePtr){
|
|
Packit Service |
9ccfef |
/* check whether there's access for class reference,
|
|
Packit Service |
9ccfef |
which is not allowed */
|
|
Packit Service |
9ccfef |
if(attributePtr->parentClassPtr)
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ATTRIBUTE_CLASS_ACCESS,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
else {
|
|
Packit Service |
9ccfef |
setAttributeAccess(attributePtr,$10);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else if(attributePtr && attributePtr->parentTypePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ATTRIBUTE_MISSING_ACCESS,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
defaultStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($12 && attributePtr){
|
|
Packit Service |
9ccfef |
if(attributePtr->parentClassPtr)
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ATTRIBUTE_CLASS_DEFAULT,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
else{
|
|
Packit Service |
9ccfef |
attributePtr->export.value = *$12;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else if(attributePtr)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
attributePtr->export.value.basetype =
|
|
Packit Service |
9ccfef |
SMI_BASETYPE_UNKNOWN;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
formatStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($14 && attributePtr){
|
|
Packit Service |
9ccfef |
if(attributePtr->parentClassPtr)
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ATTRIBUTE_CLASS_FORMAT,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
else{
|
|
Packit Service |
9ccfef |
if (smiCheckFormat(thisParserPtr,
|
|
Packit Service |
9ccfef |
attributePtr->export.basetype,$14, 0))
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
attributePtr->export.format = $14;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
unitsStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($16 && attributePtr){
|
|
Packit Service |
9ccfef |
if(attributePtr->parentClassPtr)
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_ATTRIBUTE_CLASS_UNITS,
|
|
Packit Service |
9ccfef |
attributeIdentifier);
|
|
Packit Service |
9ccfef |
else{
|
|
Packit Service |
9ccfef |
attributePtr->export.units = $16;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (attributePtr && $18)
|
|
Packit Service |
9ccfef |
attributePtr->export.status = $18;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (attributePtr && $20)
|
|
Packit Service |
9ccfef |
attributePtr->export.description = $20;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (attributePtr && $22)
|
|
Packit Service |
9ccfef |
attributePtr->export.reference = $22;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = attributePtr;
|
|
Packit Service |
9ccfef |
attributePtr = NULL;
|
|
Packit Service |
9ccfef |
defaultBasetype = SMI_BASETYPE_UNKNOWN;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
eventStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| eventStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed event statements.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
eventStatement_stmtsep_1n: eventStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| eventStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
eventStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* events or return -1, if at least one
|
|
Packit Service |
9ccfef |
* failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
eventStatement_stmtsep: eventStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Type *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
eventStatement: eventKeyword sep lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
//TODO check for repeated names
|
|
Packit Service |
9ccfef |
eventPtr=addEvent($3,classPtr,thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($8 && eventPtr)
|
|
Packit Service |
9ccfef |
eventPtr->export.status = $8;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($10 && eventPtr)
|
|
Packit Service |
9ccfef |
eventPtr->export.description = $10;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if($12 && eventPtr)
|
|
Packit Service |
9ccfef |
eventPtr->export.reference = $12;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = eventPtr;
|
|
Packit Service |
9ccfef |
eventPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
importStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| importStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
importStatement_stmtsep_1n: importStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| importStatement_stmtsep_1n importStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* imports or return -1, if at least one
|
|
Packit Service |
9ccfef |
* module failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
importStatement_stmtsep: importStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got an (Object *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
importStatement: importKeyword sep ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
importModulename = smiStrdup($3);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '(' optsep
|
|
Packit Service |
9ccfef |
identifierList
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *listPtr, *nextPtr;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
for (listPtr = $8; listPtr; listPtr = nextPtr) {
|
|
Packit Service |
9ccfef |
addImport(listPtr->ptr, thisParserPtr);
|
|
Packit Service |
9ccfef |
thisParserPtr->modulePtr->
|
|
Packit Service |
9ccfef |
numImportedIdentifiers++;
|
|
Packit Service |
9ccfef |
nextPtr = listPtr->nextPtr;
|
|
Packit Service |
9ccfef |
free(listPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep ')' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
Module *modulePtr;
|
|
Packit Service |
9ccfef |
char *s = importModulename;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
modulePtr = findModuleByName(s);
|
|
Packit Service |
9ccfef |
if (!modulePtr) {
|
|
Packit Service |
9ccfef |
modulePtr = loadModule(s, thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
checkImports(modulePtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
free(s);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
revisionStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| revisionStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
revisionStatement_stmtsep_1n: revisionStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| revisionStatement_stmtsep_1n revisionStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* revisions or return -1, if at least one
|
|
Packit Service |
9ccfef |
* module failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
revisionStatement_stmtsep: revisionStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Revision *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
revisionStatement: revisionKeyword optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
dateStatement stmtsep
|
|
Packit Service |
9ccfef |
descriptionStatement stmtsep
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = addRevision($5, $7, thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identityStatement_stmtsep_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| identityStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Return the number of successfully
|
|
Packit Service |
9ccfef |
* parsed identity statements.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identityStatement_stmtsep_1n: identityStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| identityStatement_stmtsep_1n
|
|
Packit Service |
9ccfef |
identityStatement_stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* Sum up the number of successfully parsed
|
|
Packit Service |
9ccfef |
* identities or return -1, if at least one
|
|
Packit Service |
9ccfef |
* failed.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if (($1 >= 0) && ($2 >= 0)) {
|
|
Packit Service |
9ccfef |
$$ = $1 + $2;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identityStatement_stmtsep: identityStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* If we got a (Type *) return rc == 1,
|
|
Packit Service |
9ccfef |
* otherwise parsing failed (rc == -1).
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
$$ = 1;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = -1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identityStatement: identityKeyword sep lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
identityIdentifier = $3;
|
|
Packit Service |
9ccfef |
identityPtr = addIdentity(identityIdentifier,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setIdentityDecl(identityPtr, SMI_DECL_IDENTITY);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
optsep '{' stmtsep
|
|
Packit Service |
9ccfef |
parentStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if(identityPtr && $8) {
|
|
Packit Service |
9ccfef |
setIdentityParent(identityPtr,$8);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (identityPtr && $10) {
|
|
Packit Service |
9ccfef |
setIdentityStatus(identityPtr, $10);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (identityPtr && $12) {
|
|
Packit Service |
9ccfef |
setIdentityDescription(identityPtr, $12,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
setIdentityReference(identityPtr, $14,
|
|
Packit Service |
9ccfef |
thisParserPtr)
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
'}' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
identityPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
typedefTypeStatement: typeKeyword sep refinedBaseType_refinedType optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attributeTypeStatement: typeKeyword sep attribute_refinedBaseType_refinedType optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
dateStatement: dateKeyword sep date optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
organizationStatement: organizationKeyword sep text optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
contactStatement: contactKeyword sep text optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
formatStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| formatStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
formatStatement: formatKeyword sep format optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
unitsStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| unitsStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
unitsStatement: unitsKeyword sep units optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
statusStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_STATUS_CURRENT;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| statusStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
statusStatement: statusKeyword sep status optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
uniqueStatement_stmtsep_01:
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| uniqueStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
uniqueStatement: uniqueKeyword sep '(' uniqueSpec ')' optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
uniqueSpec: optsep_comma_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = "#@#"; //used to indicate that unique
|
|
Packit Service |
9ccfef |
//statement is present and empty
|
|
Packit Service |
9ccfef |
//i.e. the class is scalar
|
|
Packit Service |
9ccfef |
$$->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| lcIdentifier furtherLcIdentifier_0n optsep_comma_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
extendsStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| extendsStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
extendsStatement: extendsKeyword sep ucIdentifier optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = findClass($3, thisParserPtr,thisModulePtr);
|
|
Packit Service |
9ccfef |
if(!$$)smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNKNOWN_CLASS,
|
|
Packit Service |
9ccfef |
$3);
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
defaultStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| defaultStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
defaultStatement: defaultKeyword sep anyValue optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
accessStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_ACCESS_UNKNOWN;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| accessStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
accessStatement: accessKeyword sep access optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
access: readonlyKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_ACCESS_READ_ONLY;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| readwriteKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_ACCESS_READ_WRITE;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| eventonlyKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_ACCESS_EVENT_ONLY;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
parentStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| parentStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
parentStatement: parentKeyword sep lcIdentifier optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = findIdentity($3, thisParserPtr, thisModulePtr);
|
|
Packit Service |
9ccfef |
if(!$$)smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_IDENTITY_PARENT_NOT_FOUND,
|
|
Packit Service |
9ccfef |
$3);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
descriptionStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| descriptionStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
descriptionStatement: descriptionKeyword sep text optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
referenceStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| referenceStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
referenceStatement: referenceKeyword sep text optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
abnfStatement_stmtsep_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| abnfStatement stmtsep
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
abnfStatement: abnfKeyword sep text optsep ';'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
refinedBaseType_refinedType: refinedBaseType
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| refinedType
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attribute_refinedBaseType_refinedType: attribute_refinedBaseType
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| attribute_refinedType
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
refinedBaseType: OctetStringKeyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeOctetStringPtr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeOctetStringPtr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeOctetStringPtr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| ObjectIdentifierKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeObjectIdentifierPtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Integer32Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeInteger32Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeInteger32Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeInteger32Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Unsigned32Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeUnsigned32Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeUnsigned32Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeUnsigned32Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Integer64Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeInteger64Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeInteger64Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeInteger64Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Unsigned64Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeUnsigned64Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeUnsigned64Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeUnsigned64Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Float32Keyword optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeFloat32Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeFloat32Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeFloat32Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Float64Keyword optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeFloat64Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeFloat64Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeFloat64Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Float128Keyword optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeFloat128Ptr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeFloat128Ptr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeFloat128Ptr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| PointerKeyword optsep_pointerRestr_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typePointerPtr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typePointerPtr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typePointerPtr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| EnumerationKeyword bitsOrEnumerationSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$2) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeEnumPtr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeEnumPtr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeEnumPtr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((NamedNumber *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| BitsKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
bitsFlag = 1; //Since Enum elements can be
|
|
Packit Service |
9ccfef |
//negative we must make sure
|
|
Packit Service |
9ccfef |
//that bits is not negative,
|
|
Packit Service |
9ccfef |
//so we raise bitsFlag and
|
|
Packit Service |
9ccfef |
//give error if there is
|
|
Packit Service |
9ccfef |
//negative value
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
bitsOrEnumerationSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (!$3) {
|
|
Packit Service |
9ccfef |
$$ = smiHandle->typeBitsPtr;
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = duplicateType(smiHandle->typeBitsPtr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeParent($$, smiHandle->typeBitsPtr);
|
|
Packit Service |
9ccfef |
setTypeList($$, $3);
|
|
Packit Service |
9ccfef |
for (p = $3; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((NamedNumber *)p->ptr)->typePtr = $$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsFlag = 0;//reset flag
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attribute_refinedBaseType: OctetStringKeyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeOctetStringPtr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeOctetStringPtr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| ObjectIdentifierKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(
|
|
Packit Service |
9ccfef |
smiHandle->typeObjectIdentifierPtr, classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeObjectIdentifierPtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Integer32Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeInteger32Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeInteger32Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Unsigned32Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeUnsigned32Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeUnsigned32Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Integer64Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeInteger64Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeInteger64Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Unsigned64Keyword optsep_numberSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeUnsigned64Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeUnsigned64Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Float32Keyword optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeFloat32Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeFloat32Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Float64Keyword optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeFloat64Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeFloat64Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| Float128Keyword optsep_floatSpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeFloat128Ptr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeFloat128Ptr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((Range *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| PointerKeyword optsep_pointerRestr_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typePointerPtr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typePointerPtr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| EnumerationKeyword bitsOrEnumerationSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeEnumPtr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeEnumPtr);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $2);
|
|
Packit Service |
9ccfef |
for (p = $2; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((NamedNumber *)p->ptr)->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| BitsKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
bitsFlag = 1; //Since Enum elements can be
|
|
Packit Service |
9ccfef |
//negative we must make sure
|
|
Packit Service |
9ccfef |
//that bits is not negative,
|
|
Packit Service |
9ccfef |
//so we raise bitsFlag and
|
|
Packit Service |
9ccfef |
//give error if there is
|
|
Packit Service |
9ccfef |
//negative value
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
bitsOrEnumerationSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = duplicateTypeToAttribute(smiHandle->typeBitsPtr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType($$, smiHandle->typeBitsPtr);
|
|
Packit Service |
9ccfef |
if ($1) {
|
|
Packit Service |
9ccfef |
setAttributeList($$, $1);
|
|
Packit Service |
9ccfef |
for (p = $1; p; p = p->nextPtr)
|
|
Packit Service |
9ccfef |
((NamedNumber *)(p->ptr))->typePtr = (Type*)$$;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsFlag = 0; /* reset flag */
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
refinedType: qucIdentifier optsep_anySpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
typePtr = findType($1, thisParserPtr,
|
|
Packit Service |
9ccfef |
thisModulePtr);
|
|
Packit Service |
9ccfef |
if (typePtr && $2) {
|
|
Packit Service |
9ccfef |
typePtr = duplicateType(typePtr, 0,
|
|
Packit Service |
9ccfef |
thisParserPtr);
|
|
Packit Service |
9ccfef |
setTypeList(typePtr, $2);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = typePtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
attribute_refinedType: qucIdentifier optsep_anySpec_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
Class *tmp;
|
|
Packit Service |
9ccfef |
typePtr = findType($1, thisParserPtr,
|
|
Packit Service |
9ccfef |
thisModulePtr);
|
|
Packit Service |
9ccfef |
if (typePtr && $2) {
|
|
Packit Service |
9ccfef |
attributePtr = duplicateTypeToAttribute(typePtr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeList(attributePtr, $2);
|
|
Packit Service |
9ccfef |
setAttributeParentType(attributePtr, typePtr);
|
|
Packit Service |
9ccfef |
} else if( typePtr ){
|
|
Packit Service |
9ccfef |
attributePtr = duplicateTypeToAttribute(typePtr,
|
|
Packit Service |
9ccfef |
classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentType(attributePtr, typePtr);
|
|
Packit Service |
9ccfef |
} else if($2){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr, ERR_UNKNOWN_TYPE, $1);
|
|
Packit Service |
9ccfef |
attributePtr = NULL;
|
|
Packit Service |
9ccfef |
} else if (tmp = findClass($1,
|
|
Packit Service |
9ccfef |
thisParserPtr,thisModulePtr)){
|
|
Packit Service |
9ccfef |
attributePtr = addAttribute($1, classPtr, thisParserPtr);
|
|
Packit Service |
9ccfef |
setAttributeParentClass(attributePtr, tmp);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
attributePtr = NULL;
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNKNOWN_TYPE_OR_CLASS, $1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
$$ = attributePtr;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_anySpec_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| optsep anySpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
anySpec: numberSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| floatSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_numberSpec_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| optsep numberSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
numberSpec: '(' optsep numberElement furtherNumberElement_0n
|
|
Packit Service |
9ccfef |
optsep ')'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $3;
|
|
Packit Service |
9ccfef |
$$->nextPtr = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherNumberElement_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherNumberElement_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherNumberElement_1n: furtherNumberElement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherNumberElement_1n furtherNumberElement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p, *pp;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
p = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
p->ptr = $2;
|
|
Packit Service |
9ccfef |
p->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
for (pp = $1; pp->nextPtr; pp = pp->nextPtr);
|
|
Packit Service |
9ccfef |
pp->nextPtr = p;
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherNumberElement: optsep '|' optsep numberElement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
numberElement: signedNumber numberUpperLimit_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(Range));
|
|
Packit Service |
9ccfef |
$$->export.minValue = *$1;
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
$$->export.maxValue = *$2;
|
|
Packit Service |
9ccfef |
smiFree($2);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$->export.maxValue = *$1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
smiFree($1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
numberUpperLimit_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| numberUpperLimit
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
numberUpperLimit: optsep DOT_DOT optsep signedNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_floatSpec_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| optsep floatSpec
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
floatSpec: '(' optsep floatElement furtherFloatElement_0n
|
|
Packit Service |
9ccfef |
optsep ')'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $3;
|
|
Packit Service |
9ccfef |
$$->nextPtr = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherFloatElement_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherFloatElement_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherFloatElement_1n: furtherFloatElement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherFloatElement_1n furtherFloatElement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p, *pp;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
p = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
p->ptr = $2;
|
|
Packit Service |
9ccfef |
p->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
for (pp = $1; pp->nextPtr; pp = pp->nextPtr);
|
|
Packit Service |
9ccfef |
pp->nextPtr = p;
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherFloatElement: optsep '|' optsep floatElement
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
floatElement: floatValue floatUpperLimit_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(Range));
|
|
Packit Service |
9ccfef |
$$->export.minValue.basetype = SMI_BASETYPE_FLOAT64;
|
|
Packit Service |
9ccfef |
$$->export.minValue.value.float64 = strtod($1, NULL);
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
$$->export.maxValue.basetype =
|
|
Packit Service |
9ccfef |
SMI_BASETYPE_FLOAT64;
|
|
Packit Service |
9ccfef |
$$->export.maxValue.value.float64 =
|
|
Packit Service |
9ccfef |
strtod($2, NULL);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$->export.maxValue = $$->export.minValue;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
floatUpperLimit_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| floatUpperLimit
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
floatUpperLimit: optsep DOT_DOT optsep floatValue
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
specialFloatValue:
|
|
Packit Service |
9ccfef |
neginfKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$="-inf";
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| posinfKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$="+inf";
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| qnanKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$="nan";
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| snanKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$="nan";
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_pointerRestr_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| optsep pointerRestr
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
NamedNumber *nn =(NamedNumber*)smiMalloc(sizeof(NamedNumber));
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = nn;
|
|
Packit Service |
9ccfef |
nn->export.name = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
pointerRestr: '(' optsep qlcIdentifier optsep ')'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsOrEnumerationSpec: '(' optsep bitsOrEnumerationList optsep ')'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsOrEnumerationList: bitsOrEnumerationItem furtherBitsOrEnumerationItem_0n
|
|
Packit Service |
9ccfef |
optsep_comma_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherBitsOrEnumerationItem_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherBitsOrEnumerationItem_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherBitsOrEnumerationItem_1n: furtherBitsOrEnumerationItem
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherBitsOrEnumerationItem_1n
|
|
Packit Service |
9ccfef |
furtherBitsOrEnumerationItem
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p, *pp;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
p = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
p->ptr = $2;
|
|
Packit Service |
9ccfef |
p->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
for (pp = $1; pp->nextPtr; pp = pp->nextPtr);
|
|
Packit Service |
9ccfef |
pp->nextPtr = p;
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherBitsOrEnumerationItem: optsep ',' optsep bitsOrEnumerationItem
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsOrEnumerationItem: lcIdentifier optsep '(' optsep signedNumber optsep ')'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(NamedNumber));
|
|
Packit Service |
9ccfef |
$$->export.name = $1;
|
|
Packit Service |
9ccfef |
$$->export.value = *$5;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identifierList: identifier furtherIdentifier_0n optsep_comma_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherIdentifier_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherIdentifier_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherIdentifier_1n: furtherIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherIdentifier_1n furtherIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p, *pp;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
p = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
p->ptr = $2;
|
|
Packit Service |
9ccfef |
p->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
for (pp = $1; pp->nextPtr; pp = pp->nextPtr);
|
|
Packit Service |
9ccfef |
pp->nextPtr = p;
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherIdentifier: optsep ',' optsep identifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsValue: '(' optsep bitsList optsep ')'
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $3;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
bitsList: optsep_comma_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| lcIdentifier furtherLcIdentifier_0n optsep_comma_01
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = $2;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
//NOTE used also for unique statement
|
|
Packit Service |
9ccfef |
furtherLcIdentifier_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherLcIdentifier_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherLcIdentifier_1n: furtherLcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
$$->ptr = $1;
|
|
Packit Service |
9ccfef |
$$->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| furtherLcIdentifier_1n furtherLcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
List *p, *pp;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
p = smiMalloc(sizeof(List));
|
|
Packit Service |
9ccfef |
p->ptr = $2;
|
|
Packit Service |
9ccfef |
p->nextPtr = NULL;
|
|
Packit Service |
9ccfef |
for (pp = $1; pp->nextPtr; pp = pp->nextPtr);
|
|
Packit Service |
9ccfef |
pp->nextPtr = p;
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
furtherLcIdentifier: optsep ',' optsep lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $4;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
identifier: ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
qucIdentifier: ucIdentifier COLON_COLON ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
char *s;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
s = smiMalloc(strlen($1) +
|
|
Packit Service |
9ccfef |
strlen($3) + 3);
|
|
Packit Service |
9ccfef |
sprintf(s, "%s::%s", $1, $3);
|
|
Packit Service |
9ccfef |
$$ = s;
|
|
Packit Service |
9ccfef |
free($1);
|
|
Packit Service |
9ccfef |
free($3);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| ucIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
qlcIdentifier: ucIdentifier COLON_COLON lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
char *s;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
s = smiMalloc(strlen($1) +
|
|
Packit Service |
9ccfef |
strlen($3) + 3);
|
|
Packit Service |
9ccfef |
sprintf(s, "%s::%s", $1, $3);
|
|
Packit Service |
9ccfef |
$$ = s;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| lcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
text: textSegment optsep_textSegment_0n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
int len;
|
|
Packit Service |
9ccfef |
if ($2) {
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(strlen($1) + strlen($2) + 1);
|
|
Packit Service |
9ccfef |
strcpy($$, $1);
|
|
Packit Service |
9ccfef |
strcat($$, $2);
|
|
Packit Service |
9ccfef |
free($1);
|
|
Packit Service |
9ccfef |
free($2);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
$$ = smiStrdup($1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
len = strlen($$);
|
|
Packit Service |
9ccfef |
while (len > 0 && $$[len-1] == '\n') {
|
|
Packit Service |
9ccfef |
$$[--len] = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_textSegment_0n: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| optsep_textSegment_1n
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_textSegment_1n: optsep_textSegment
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| optsep_textSegment_1n optsep_textSegment
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(strlen($1) + strlen($2) + 1);
|
|
Packit Service |
9ccfef |
strcpy($$, $1);
|
|
Packit Service |
9ccfef |
strcat($$, $2);
|
|
Packit Service |
9ccfef |
free($1);
|
|
Packit Service |
9ccfef |
free($2);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_textSegment: optsep textSegment
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiStrdup($2);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
date: textSegment
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = checkDate(thisParserPtr, $1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
format: textSegment
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiStrdup($1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
units: textSegment
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiStrdup($1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* The type of `anyValue' must be determined from the
|
|
Packit Service |
9ccfef |
* context. `anyValue' appears only in default value clauses. Hence,
|
|
Packit Service |
9ccfef |
* we set a global variable defaultBasetype in the object type
|
|
Packit Service |
9ccfef |
* declaring clause to remember the expected type. Here, we use this
|
|
Packit Service |
9ccfef |
* variable to build an SmiValue with the appropriate base type.
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
anyValue: bitsValue
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (defaultBasetype == SMI_BASETYPE_BITS) {
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_BITS;
|
|
Packit Service |
9ccfef |
$$->value.ptr = (void*)($1);
|
|
Packit Service |
9ccfef |
//set the bits value in the value.integer32
|
|
Packit Service |
9ccfef |
if(typePtr){
|
|
Packit Service |
9ccfef |
createBitsValue($$,typePtr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else if(attributePtr){
|
|
Packit Service |
9ccfef |
createBitsValue($$,
|
|
Packit Service |
9ccfef |
(Type*)smiGetAttributeParentType(&(attributePtr->export)));
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| decimalNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/* Note: might also be an OID or signed */
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_UNSIGNED32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_UNSIGNED32;
|
|
Packit Service |
9ccfef |
$$->value.unsigned32 = strtoul($1, NULL, 10);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_UNSIGNED64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_UNSIGNED64;
|
|
Packit Service |
9ccfef |
$$->value.unsigned64 = strtoull($1, NULL, 10);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_INTEGER32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER32;
|
|
Packit Service |
9ccfef |
$$->value.integer32 = strtol($1, NULL, 10);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_INTEGER64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER64;
|
|
Packit Service |
9ccfef |
$$->value.integer64 = strtoll($1, NULL, 10);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_OBJECTIDENTIFIER:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OBJECTIDENTIFIER;
|
|
Packit Service |
9ccfef |
$$->len = strlen($1);
|
|
Packit Service |
9ccfef |
$$->value.ptr = smiStrdup($1);
|
|
Packit Service |
9ccfef |
/* TODO */
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| '-' decimalNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_INTEGER32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER32;
|
|
Packit Service |
9ccfef |
$$->value.integer32 = - strtol($2, NULL, 10);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_INTEGER64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER64;
|
|
Packit Service |
9ccfef |
$$->value.integer64 = - strtoll($2, NULL, 10);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| hexadecimalNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/* Note: might also be an octet string */
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_UNSIGNED32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_UNSIGNED32;
|
|
Packit Service |
9ccfef |
$$->value.unsigned32 = strtoul($1, NULL, 16);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_UNSIGNED64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_UNSIGNED64;
|
|
Packit Service |
9ccfef |
$$->value.unsigned64 = strtoull($1, NULL, 16);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_INTEGER32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER32;
|
|
Packit Service |
9ccfef |
$$->value.integer32 = strtol($1, NULL, 16);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_INTEGER64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER64;
|
|
Packit Service |
9ccfef |
$$->value.integer64 = strtoll($1, NULL, 16);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_OCTETSTRING:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OCTETSTRING;
|
|
Packit Service |
9ccfef |
$$->value.ptr = hexToStr($1,strlen($1));
|
|
Packit Service |
9ccfef |
$$->len = strlen($$->value.ptr);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| floatValue
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/* Note: might also be an OID */
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT32;
|
|
Packit Service |
9ccfef |
$$->value.float32 = strtof($1,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $1);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT64;
|
|
Packit Service |
9ccfef |
$$->value.float64 = strtod($1,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $1);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT128:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT128;
|
|
Packit Service |
9ccfef |
$$->value.float128 = strtold($1,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $1);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_OBJECTIDENTIFIER:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OBJECTIDENTIFIER;
|
|
Packit Service |
9ccfef |
$$->value.ptr = smiMalloc(strlen($1)+1);
|
|
Packit Service |
9ccfef |
strcpy($$->value.ptr,$1);
|
|
Packit Service |
9ccfef |
$$->len = strlen($$->value.ptr);
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| '-' floatValue
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT32;
|
|
Packit Service |
9ccfef |
$$->value.float32 = - strtof($2,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $2);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT64;
|
|
Packit Service |
9ccfef |
$$->value.float64 = - strtof($2,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $2);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT128:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT128;
|
|
Packit Service |
9ccfef |
$$->value.float128 = - strtof($2,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $2);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| specialFloatValue
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/* Note: might also be an OID */
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT32:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT32;
|
|
Packit Service |
9ccfef |
$$->value.float32 = strtof($1,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $1);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT64:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT64;
|
|
Packit Service |
9ccfef |
$$->value.float64 = strtod($1,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $1);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_FLOAT128:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_FLOAT128;
|
|
Packit Service |
9ccfef |
$$->value.float128 = strtold($1,NULL);
|
|
Packit Service |
9ccfef |
if(errno == ERANGE){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_FLOAT_OVERFLOW, $1);
|
|
Packit Service |
9ccfef |
errno = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| text
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (defaultBasetype == SMI_BASETYPE_OCTETSTRING) {
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OCTETSTRING;
|
|
Packit Service |
9ccfef |
$$->value.ptr = $1;
|
|
Packit Service |
9ccfef |
$$->len = strlen($1);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| qlcIdentifier
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
/* Note: might be an Enumeration item or OID */
|
|
Packit Service |
9ccfef |
/* TODO: convert if it's an oid? */
|
|
Packit Service |
9ccfef |
switch (defaultBasetype) {
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_ENUM:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_ENUM;
|
|
Packit Service |
9ccfef |
$$->value.ptr = $1;
|
|
Packit Service |
9ccfef |
$$->len = strlen($1);
|
|
Packit Service |
9ccfef |
/* TODO: XXX convert to int */
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_OBJECTIDENTIFIER:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OBJECTIDENTIFIER;
|
|
Packit Service |
9ccfef |
$$->value.ptr = $1;
|
|
Packit Service |
9ccfef |
$$->len = strlen($1);
|
|
Packit Service |
9ccfef |
/* TODO: XXX convert to oid if found */
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
case SMI_BASETYPE_POINTER:
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OBJECTIDENTIFIER;
|
|
Packit Service |
9ccfef |
$$->value.ptr = $1;
|
|
Packit Service |
9ccfef |
$$->len = strlen($1);
|
|
Packit Service |
9ccfef |
/* TODO: XXX check if valid reference found */
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
default:
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
break;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| qOID
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if (defaultBasetype == SMI_BASETYPE_OBJECTIDENTIFIER){
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_OBJECTIDENTIFIER;
|
|
Packit Service |
9ccfef |
$$->value.ptr = $1;
|
|
Packit Service |
9ccfef |
$$->len = strlen($$->value.ptr);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
else
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_UNEXPECTED_VALUETYPE);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
qOID: ucIdentifier COLON_COLON OID
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
char *s;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
s = smiMalloc(strlen($1) +
|
|
Packit Service |
9ccfef |
strlen($3) + 3);
|
|
Packit Service |
9ccfef |
sprintf(s, "%s::%s", $1, $3);
|
|
Packit Service |
9ccfef |
$$ = s;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| OID
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(strlen($1)+1);
|
|
Packit Service |
9ccfef |
strcpy($$,$1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
status: currentKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_STATUS_CURRENT;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| deprecatedKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_STATUS_DEPRECATED;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| obsoleteKeyword
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = SMI_STATUS_OBSOLETE;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
number: hexadecimalNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_UNSIGNED64;
|
|
Packit Service |
9ccfef |
$$->value.unsigned64 = strtoull($1, NULL, 16);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| decimalNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_UNSIGNED64;
|
|
Packit Service |
9ccfef |
$$->value.unsigned64 = strtoull($1, NULL, 10);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
negativeNumber: '-' decimalNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
if(bitsFlag){
|
|
Packit Service |
9ccfef |
smiPrintError(thisParserPtr,
|
|
Packit Service |
9ccfef |
ERR_BITS_NUMBER_NEGATIVE);
|
|
Packit Service |
9ccfef |
$$ = NULL;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
$$ = smiMalloc(sizeof(SmiValue));
|
|
Packit Service |
9ccfef |
$$->basetype = SMI_BASETYPE_INTEGER64;
|
|
Packit Service |
9ccfef |
$$->value.integer64 = - strtoll($2, NULL, 10);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
signedNumber: number
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
| negativeNumber
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = $1;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/* decimalNumber, hexadecimalNumber, floatValue */
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
/* unknown... */
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep_comma_01: /* empty */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
/* | optsep ',' */
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
sep: /* empty, skipped by lexer */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
optsep: /* empty, skipped by lexer */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
stmtsep: /* empty, skipped by lexer */
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
$$ = 0;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
%%
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#endif
|
|
Packit Service |
9ccfef |
|