| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| %option noyywrap |
| |
| %{ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| static YY_BUFFER_STATE yybuffer[MAX_LEX_DEPTH]; |
| |
| static int lexDepth = 0; |
| |
| |
| int |
| smingEnterLexRecursion(file) |
| FILE *file; |
| { |
| if (lexDepth >= MAX_LEX_DEPTH) { |
| return (-1); |
| } |
| yybuffer[lexDepth++] = YY_CURRENT_BUFFER; |
| yy_switch_to_buffer(yy_create_buffer(file, YY_BUF_SIZE)); |
| return (lexDepth); |
| } |
| |
| |
| |
| void |
| smingLeaveLexRecursion() |
| { |
| yy_delete_buffer(YY_CURRENT_BUFFER); |
| yy_switch_to_buffer(yybuffer[--lexDepth]); |
| } |
| |
| |
| |
| %} |
| |
| |
| |
| |
| |
| |
| delim ([^a-zA-Z0-9-]) |
| lineBreak ("\n"|"\n\015"|"\015\n") |
| WSP (" "|"\t") |
| VCHAR ([\041-\176]) |
| HTAB "\t" |
| SP " " |
| |
| |
| |
| |
| |
| %s Skipline |
| |
| %% |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <INITIAL>"//"({WSP}|{VCHAR})*/"\n" { |
| } |
| |
| <INITIAL>"//"({WSP}|{VCHAR})*/"\n\015" { |
| } |
| |
| <INITIAL>"//"({WSP}|{VCHAR})*/"\015\n" { |
| } |
| |
| |
| |
| |
| |
| <INITIAL>[\{\}\(\)\;\,\-\.\|] { |
| return yytext[0]; |
| } |
| |
| <INITIAL>".." { |
| return DOT_DOT; |
| } |
| |
| <INITIAL>"."/[^\.] { |
| return DOT; |
| } |
| |
| <INITIAL>"::" { |
| return COLON_COLON; |
| } |
| |
| |
| |
| |
| |
| <INITIAL>{lineBreak} { |
| thisParser.line++; |
| } |
| |
| <INITIAL>{WSP} { |
| } |
| |
| |
| |
| |
| |
| <INITIAL>module/{delim} { |
| yylval.id = yytext; |
| return moduleKeyword; |
| } |
| |
| <INITIAL>import/{delim} { |
| yylval.id = yytext; |
| return importKeyword; |
| } |
| |
| <INITIAL>revision/{delim} { |
| yylval.id = yytext; |
| return revisionKeyword; |
| } |
| |
| <INITIAL>date/{delim} { |
| yylval.id = yytext; |
| return dateKeyword; |
| } |
| |
| <INITIAL>organization/{delim} { |
| yylval.id = yytext; |
| return organizationKeyword; |
| } |
| |
| <INITIAL>contact/{delim} { |
| yylval.id = yytext; |
| return contactKeyword; |
| } |
| |
| <INITIAL>description/{delim} { |
| yylval.id = yytext; |
| return descriptionKeyword; |
| } |
| |
| <INITIAL>reference/{delim} { |
| yylval.id = yytext; |
| return referenceKeyword; |
| } |
| |
| <INITIAL>extension/{delim} { |
| yylval.id = yytext; |
| return extensionKeyword; |
| } |
| |
| <INITIAL>typedef/{delim} { |
| yylval.id = yytext; |
| return typedefKeyword; |
| } |
| |
| <INITIAL>type/{delim} { |
| yylval.id = yytext; |
| return typeKeyword; |
| } |
| |
| <INITIAL>parent/{delim} { |
| yylval.id = yytext; |
| return parentKeyword; |
| } |
| |
| <INITIAL>identity/{delim} { |
| yylval.id = yytext; |
| return identityKeyword; |
| } |
| |
| <INITIAL>class/{delim} { |
| yylval.id = yytext; |
| return classKeyword; |
| } |
| |
| <INITIAL>extends/{delim} { |
| yylval.id = yytext; |
| return extendsKeyword; |
| } |
| |
| <INITIAL>attribute/{delim} { |
| yylval.id = yytext; |
| return attributeKeyword; |
| } |
| |
| <INITIAL>unique/{delim} { |
| yylval.id = yytext; |
| return uniqueKeyword; |
| } |
| |
| <INITIAL>event/{delim} { |
| yylval.id = yytext; |
| return eventKeyword; |
| } |
| |
| <INITIAL>format/{delim} { |
| yylval.id = yytext; |
| return formatKeyword; |
| } |
| |
| <INITIAL>units/{delim} { |
| yylval.id = yytext; |
| return unitsKeyword; |
| } |
| |
| <INITIAL>status/{delim} { |
| yylval.id = yytext; |
| return statusKeyword; |
| } |
| |
| <INITIAL>access/{delim} { |
| yylval.id = yytext; |
| return accessKeyword; |
| } |
| |
| <INITIAL>default/{delim} { |
| yylval.id = yytext; |
| return defaultKeyword; |
| } |
| |
| <INITIAL>abnf/{delim} { |
| yylval.id = yytext; |
| return abnfKeyword; |
| } |
| |
| |
| |
| |
| |
| <INITIAL>OctetString/{delim} { |
| yylval.id = yytext; |
| return OctetStringKeyword; |
| } |
| |
| <INITIAL>Pointer/{delim} { |
| yylval.id = yytext; |
| return PointerKeyword; |
| } |
| |
| <INITIAL>ObjectIdentifier/{delim} { |
| yylval.id = yytext; |
| return ObjectIdentifierKeyword; |
| } |
| |
| <INITIAL>Integer32/{delim} { |
| yylval.id = yytext; |
| return Integer32Keyword; |
| } |
| |
| <INITIAL>Integer64/{delim} { |
| yylval.id = yytext; |
| return Integer64Keyword; |
| } |
| |
| <INITIAL>Unsigned32/{delim} { |
| yylval.id = yytext; |
| return Unsigned32Keyword; |
| } |
| |
| <INITIAL>Unsigned64/{delim} { |
| yylval.id = yytext; |
| return Unsigned64Keyword; |
| } |
| |
| <INITIAL>Float32/{delim} { |
| yylval.id = yytext; |
| return Float32Keyword; |
| } |
| |
| <INITIAL>Float64/{delim} { |
| yylval.id = yytext; |
| return Float64Keyword; |
| } |
| |
| <INITIAL>Float128/{delim} { |
| yylval.id = yytext; |
| return Float128Keyword; |
| } |
| |
| <INITIAL>Bits/{delim} { |
| yylval.id = yytext; |
| return BitsKeyword; |
| } |
| |
| <INITIAL>Enumeration/{delim} { |
| yylval.id = yytext; |
| return EnumerationKeyword; |
| } |
| |
| |
| |
| |
| |
| <INITIAL>current/{delim} { |
| yylval.id = yytext; |
| return currentKeyword; |
| } |
| |
| <INITIAL>deprecated/{delim} { |
| yylval.id = yytext; |
| return deprecatedKeyword; |
| } |
| |
| <INITIAL>obsolete/{delim} { |
| yylval.id = yytext; |
| return obsoleteKeyword; |
| } |
| |
| |
| |
| |
| |
| <INITIAL>eventonly/{delim} { |
| yylval.id = yytext; |
| return eventonlyKeyword; |
| } |
| |
| <INITIAL>readonly/{delim} { |
| yylval.id = yytext; |
| return readonlyKeyword; |
| } |
| |
| <INITIAL>readwrite/{delim} { |
| yylval.id = yytext; |
| return readwriteKeyword; |
| } |
| |
| |
| |
| |
| |
| <INITIAL>neginf/{delim} { |
| yylval.id = yytext; |
| return neginfKeyword; |
| } |
| |
| <INITIAL>posinf/{delim} { |
| yylval.id = yytext; |
| return posinfKeyword; |
| } |
| |
| <INITIAL>snan/{delim} { |
| yylval.id = yytext; |
| return snanKeyword; |
| } |
| |
| <INITIAL>qnan/{delim} { |
| yylval.id = yytext; |
| return qnanKeyword; |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| <INITIAL>[A-Z](-?[a-zA-Z0-9_]+)*-? { |
| if (yytext[yyleng-1] == '-') { |
| smiPrintError(parser, ERR_ID_ENDS_IN_HYPHEN, yytext); |
| } |
| if (yyleng > 64) { |
| smiPrintError(parser, ERR_UCIDENTIFIER_64, yytext); |
| } |
| if (strchr(yytext, '_')) { |
| smiPrintError(parser, ERR_UNDERSCORE_IN_IDENTIFIER, yytext); |
| } |
| yylval.text = smiStrdup(yytext); |
| return ucIdentifier; |
| } |
| |
| |
| <INITIAL>[a-z](-?[a-zA-Z0-9_]+)*-? { |
| if (yytext[yyleng-1] == '-') { |
| smiPrintError(parser, ERR_ID_ENDS_IN_HYPHEN, yytext); |
| } |
| if (yyleng > 64) { |
| smiPrintError(parser, ERR_LCIDENTIFIER_64, yytext); |
| } |
| if (strchr(yytext, '_')) { |
| smiPrintError(parser, ERR_UNDERSCORE_IN_IDENTIFIER, yytext); |
| } |
| yylval.text = smiStrdup(yytext); |
| return lcIdentifier; |
| } |
| |
| |
| |
| |
| |
| |
| |
| <INITIAL>0+/[0-9] { |
| smiPrintError(parser, ERR_LEADING_ZEROS); |
| } |
| |
| <INITIAL>([1-9][0-9]*|0)/[^0-9] { |
| if ((yyleng > sizeof(MAX_NUMBER)-1) || |
| ((yyleng == sizeof(MAX_NUMBER)-1) && |
| (strcmp(yytext, MAX_NUMBER) > 0))) { |
| smiPrintError(parser, ERR_NUMBER_TOO_LARGE, yytext); |
| } |
| yylval.text = yytext; |
| return decimalNumber; |
| } |
| |
| <INITIAL>0x[0-9a-fA-F]+/[^0-9a-fA-F] { |
| if (yyleng % 2) { |
| smiPrintError(parser, ERR_HEX_STRING_MUL2, yytext); |
| } |
| yylval.text = yytext; |
| return hexadecimalNumber; |
| } |
| |
| |
| |
| |
| <INITIAL>([0-9]*\.[0-9]+([eE][+-]?[0-9]+)?)/[^0-9] { |
| yylval.text = yytext; |
| return floatValue; |
| } |
| |
| |
| |
| |
| |
| <INITIAL>([0-9A-Za-z]-?)+\.([0-9A-Za-z]-?)+\.([0-9A-Za-z]-?)+(\.([0-9A-Za-z]-?)+)*/([^0-9A-Za-z]) { |
| yylval.text = yytext; |
| return OID; |
| } |
| |
| |
| |
| |
| |
| |
| <INITIAL>\"([^\"]|(\\\"))*\" { |
| char *s, *d; /* the source and destination pointer */ |
| int column = 0; /* the current column */ |
| int newlineflag = 0; /* we have just passed a newline */ |
| int cutoffcolumn = 0; /* cut off white space up to this column */ |
| /* (computed by caculating the indentation */ |
| /* of the first column) */ |
| |
| yytext[yyleng-1] = '\0'; |
| for (d = yytext, s = yytext+1; s[0]; s++, d++) { |
| |
| if ((s[0] == '\n' && s[1] == '\r') /* newline sequence */ |
| || (s[0] == '\r' && s[1] == '\n')) { |
| thisParser.line += 1; |
| d[0] = '\n'; |
| s++; |
| newlineflag = 1; |
| column = 0; |
| if (cutoffcolumn < 0) cutoffcolumn = 0; |
| } else if (s[0] == '\n') { /* simple newline */ |
| thisParser.line += 1; |
| d[0] = '\n'; |
| newlineflag = 1; |
| column = 0; |
| if (cutoffcolumn < 0) cutoffcolumn = 0; |
| } else { |
| if (newlineflag && isspace((int)(unsigned char)s[0])) { /* space after newline */ |
| if (cutoffcolumn <= 0) { |
| cutoffcolumn -= (s[0] == '\t') ? (8-((column-1) % 8)) : 1; |
| } |
| column += (s[0] == '\t') ? (8-((column-1) % 8)) : 1; |
| if (cutoffcolumn <= 0 || column <= cutoffcolumn) { |
| d--; |
| } else { |
| d[0] = s[0]; |
| newlineflag = 0; |
| } |
| } else { /* everything else */ |
| if (! isascii(s[0])) { |
| smiPrintError(parser, ERR_ILLEGAL_CHAR_IN_STRING, |
| s[0], (unsigned char) s[0]); |
| } |
| d[0] = s[0]; |
| newlineflag = 0; |
| if (cutoffcolumn < 0) { |
| cutoffcolumn *= -1; |
| } |
| } |
| } |
| } |
| d[0] = '\0'; |
| |
| yylval.text = yytext; |
| return textSegment; |
| } |
| |
| /* |
| * Skip the remainder of the line |
| */ |
| <Skipline>.*{lineBreak} { |
| thisParser.line++; |
| BEGIN(INITIAL); |
| } |
| |
| /* |
| * Everything else... |
| */ |
| |
| . { |
| smiPrintError(parser, ERR_LEX_UNEXPECTED_CHAR); |
| BEGIN(Skipline); |
| } |
| |
| %% |
| |
| #endif |
| |