Commit d9574aee authored by Lev Walkin's avatar Lev Walkin

reverting to a much more simplistic parsing

parent 81d57419
...@@ -282,7 +282,7 @@ main(int ac, char **av) { ...@@ -282,7 +282,7 @@ main(int ac, char **av) {
exit(EX_SOFTWARE); exit(EX_SOFTWARE);
} }
return 0; return 2;
} }
/* /*
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -399,21 +399,6 @@ WITH return TOK_WITH; ...@@ -399,21 +399,6 @@ WITH return TOK_WITH;
"..." return TOK_ThreeDots; "..." return TOK_ThreeDots;
".." return TOK_TwoDots; ".." return TOK_TwoDots;
{WSP}+ /* Ignore whitespace */
[(){},;:|!.&@\[\]] return yytext[0];
[^A-Za-z0-9:=,{}<.@()[]'\"|&^*;!-] {
if(TYPE_LIFETIME(1994, 0))
fprintf(stderr, "ERROR: ");
fprintf(stderr,
"Symbol '%c' at line %d is prohibited "
"by ASN.1:1994 and ASN.1:1997\n",
yytext[0], yylineno);
if(TYPE_LIFETIME(1994, 0))
return -1;
}
<with_syntax>{ <with_syntax>{
[^&{} \t\r\v\f\n]+ { [^&{} \t\r\v\f\n]+ {
...@@ -435,7 +420,91 @@ WITH return TOK_WITH; ...@@ -435,7 +420,91 @@ WITH return TOK_WITH;
} }
[|^] return yytext[0]; /* Union, Intersection */
{WSP}+ /* Ignore whitespace */
[{][\t\r\v\f\n ]*[0-7][,][\t\r\v\f\n ]*[0-9]+[\t\r\v\f\n ]*[}] {
asn1c_integer_t v1 = -1, v2 = -1;
char *p;
for(p = yytext; *p; p++)
if(*p >= '0' && *p <= '9')
{ v1 = asn1p_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++; /* Skip digits */
for(; *p; p++) if(*p >= '0' && *p <= '9')
{ v2 = asn1p_atoi(p); break; }
if(v1 < 0 || v1 > 7) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
"mandates 0..7 range for Tuple's TableColumn\n",
yytext, yylineno);
return -1;
}
if(v2 < 0 || v2 > 15) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.14 "
"mandates 0..15 range for Tuple's TableRow\n",
yytext, yylineno);
return -1;
}
asn1p_lval.a_int = (v1 << 4) + v2;
return TOK_tuple;
}
[{][\t\r\v\f\n ]*[0-9]+[,][\t\r\v\f\n ]*[0-9]+[,][\t\r\v\f\n ]*[0-9]+[,][\t\r\v\f\n ]*[0-9]+[\t\r\v\f\n ]*[}] {
asn1c_integer_t v1 = -1, v2 = -1, v3 = -1, v4 = -1;
char *p;
for(p = yytext; *p; p++)
if(*p >= '0' && *p <= '9')
{ v1 = asn1p_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++; /* Skip digits */
for(; *p; p++) if(*p >= '0' && *p <= '9')
{ v2 = asn1p_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++;
for(; *p; p++) if(*p >= '0' && *p <= '9')
{ v3 = asn1p_atoi(p); break; }
while(*p >= '0' && *p <= '9') p++;
for(; *p; p++) if(*p >= '0' && *p <= '9')
{ v4 = asn1p_atoi(p); break; }
if(v1 < 0 || v1 > 127) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
"mandates 0..127 range for Quadruple's Group\n",
yytext, yylineno);
return -1;
}
if(v2 < 0 || v2 > 255) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
"mandates 0..255 range for Quadruple's Plane\n",
yytext, yylineno);
return -1;
}
if(v3 < 0 || v3 > 255) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
"mandates 0..255 range for Quadruple's Row\n",
yytext, yylineno);
return -1;
}
if(v4 < 0 || v4 > 255) {
fprintf(stderr, "%s at line %d: X.680:2003, #37.12 "
"mandates 0..255 range for Quadruple's Cell\n",
yytext, yylineno);
return -1;
}
asn1p_lval.a_int = (v1 << 24) | (v2 << 16) | (v3 << 8) | v4;
return TOK_quadruple;
}
[(){},;:|!.&@\[\]^] return yytext[0];
[^A-Za-z0-9:=,{}<.@()[]'\"|&^*;!-] {
if(TYPE_LIFETIME(1994, 0))
fprintf(stderr, "ERROR: ");
fprintf(stderr,
"Symbol '%c' at line %d is prohibited "
"by ASN.1:1994 and ASN.1:1997\n",
yytext[0], yylineno);
if(TYPE_LIFETIME(1994, 0))
return -1;
}
<*>. { <*>. {
fprintf(stderr, fprintf(stderr,
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -37,97 +37,99 @@ typedef union { ...@@ -37,97 +37,99 @@ typedef union {
#define TOK_hstring 261 #define TOK_hstring 261
#define TOK_identifier 262 #define TOK_identifier 262
#define TOK_number 263 #define TOK_number 263
#define TOK_number_negative 264 #define TOK_tuple 264
#define TOK_typereference 265 #define TOK_quadruple 265
#define TOK_capitalreference 266 #define TOK_number_negative 266
#define TOK_typefieldreference 267 #define TOK_typereference 267
#define TOK_valuefieldreference 268 #define TOK_capitalreference 268
#define TOK_ABSENT 269 #define TOK_typefieldreference 269
#define TOK_ABSTRACT_SYNTAX 270 #define TOK_valuefieldreference 270
#define TOK_ALL 271 #define TOK_ABSENT 271
#define TOK_ANY 272 #define TOK_ABSTRACT_SYNTAX 272
#define TOK_APPLICATION 273 #define TOK_ALL 273
#define TOK_AUTOMATIC 274 #define TOK_ANY 274
#define TOK_BEGIN 275 #define TOK_APPLICATION 275
#define TOK_BIT 276 #define TOK_AUTOMATIC 276
#define TOK_BMPString 277 #define TOK_BEGIN 277
#define TOK_BOOLEAN 278 #define TOK_BIT 278
#define TOK_BY 279 #define TOK_BMPString 279
#define TOK_CHARACTER 280 #define TOK_BOOLEAN 280
#define TOK_CHOICE 281 #define TOK_BY 281
#define TOK_CLASS 282 #define TOK_CHARACTER 282
#define TOK_COMPONENT 283 #define TOK_CHOICE 283
#define TOK_COMPONENTS 284 #define TOK_CLASS 284
#define TOK_CONSTRAINED 285 #define TOK_COMPONENT 285
#define TOK_CONTAINING 286 #define TOK_COMPONENTS 286
#define TOK_DEFAULT 287 #define TOK_CONSTRAINED 287
#define TOK_DEFINITIONS 288 #define TOK_CONTAINING 288
#define TOK_DEFINED 289 #define TOK_DEFAULT 289
#define TOK_EMBEDDED 290 #define TOK_DEFINITIONS 290
#define TOK_ENCODED 291 #define TOK_DEFINED 291
#define TOK_ENCODING_CONTROL 292 #define TOK_EMBEDDED 292
#define TOK_END 293 #define TOK_ENCODED 293
#define TOK_ENUMERATED 294 #define TOK_ENCODING_CONTROL 294
#define TOK_EXPLICIT 295 #define TOK_END 295
#define TOK_EXPORTS 296 #define TOK_ENUMERATED 296
#define TOK_EXTENSIBILITY 297 #define TOK_EXPLICIT 297
#define TOK_EXTERNAL 298 #define TOK_EXPORTS 298
#define TOK_FALSE 299 #define TOK_EXTENSIBILITY 299
#define TOK_FROM 300 #define TOK_EXTERNAL 300
#define TOK_GeneralizedTime 301 #define TOK_FALSE 301
#define TOK_GeneralString 302 #define TOK_FROM 302
#define TOK_GraphicString 303 #define TOK_GeneralizedTime 303
#define TOK_IA5String 304 #define TOK_GeneralString 304
#define TOK_IDENTIFIER 305 #define TOK_GraphicString 305
#define TOK_IMPLICIT 306 #define TOK_IA5String 306
#define TOK_IMPLIED 307 #define TOK_IDENTIFIER 307
#define TOK_IMPORTS 308 #define TOK_IMPLICIT 308
#define TOK_INCLUDES 309 #define TOK_IMPLIED 309
#define TOK_INSTANCE 310 #define TOK_IMPORTS 310
#define TOK_INSTRUCTIONS 311 #define TOK_INCLUDES 311
#define TOK_INTEGER 312 #define TOK_INSTANCE 312
#define TOK_ISO646String 313 #define TOK_INSTRUCTIONS 313
#define TOK_MAX 314 #define TOK_INTEGER 314
#define TOK_MIN 315 #define TOK_ISO646String 315
#define TOK_MINUS_INFINITY 316 #define TOK_MAX 316
#define TOK_NULL 317 #define TOK_MIN 317
#define TOK_NumericString 318 #define TOK_MINUS_INFINITY 318
#define TOK_OBJECT 319 #define TOK_NULL 319
#define TOK_ObjectDescriptor 320 #define TOK_NumericString 320
#define TOK_OCTET 321 #define TOK_OBJECT 321
#define TOK_OF 322 #define TOK_ObjectDescriptor 322
#define TOK_OPTIONAL 323 #define TOK_OCTET 323
#define TOK_PATTERN 324 #define TOK_OF 324
#define TOK_PDV 325 #define TOK_OPTIONAL 325
#define TOK_PLUS_INFINITY 326 #define TOK_PATTERN 326
#define TOK_PRESENT 327 #define TOK_PDV 327
#define TOK_PrintableString 328 #define TOK_PLUS_INFINITY 328
#define TOK_PRIVATE 329 #define TOK_PRESENT 329
#define TOK_REAL 330 #define TOK_PrintableString 330
#define TOK_RELATIVE_OID 331 #define TOK_PRIVATE 331
#define TOK_SEQUENCE 332 #define TOK_REAL 332
#define TOK_SET 333 #define TOK_RELATIVE_OID 333
#define TOK_SIZE 334 #define TOK_SEQUENCE 334
#define TOK_STRING 335 #define TOK_SET 335
#define TOK_SYNTAX 336 #define TOK_SIZE 336
#define TOK_T61String 337 #define TOK_STRING 337
#define TOK_TAGS 338 #define TOK_SYNTAX 338
#define TOK_TeletexString 339 #define TOK_T61String 339
#define TOK_TRUE 340 #define TOK_TAGS 340
#define TOK_TYPE_IDENTIFIER 341 #define TOK_TeletexString 341
#define TOK_UNIQUE 342 #define TOK_TRUE 342
#define TOK_UNIVERSAL 343 #define TOK_TYPE_IDENTIFIER 343
#define TOK_UniversalString 344 #define TOK_UNIQUE 344
#define TOK_UTCTime 345 #define TOK_UNIVERSAL 345
#define TOK_UTF8String 346 #define TOK_UniversalString 346
#define TOK_VideotexString 347 #define TOK_UTCTime 347
#define TOK_VisibleString 348 #define TOK_UTF8String 348
#define TOK_WITH 349 #define TOK_VideotexString 349
#define TOK_EXCEPT 350 #define TOK_VisibleString 350
#define TOK_INTERSECTION 351 #define TOK_WITH 351
#define TOK_UNION 352 #define TOK_EXCEPT 352
#define TOK_TwoDots 353 #define TOK_INTERSECTION 353
#define TOK_ThreeDots 354 #define TOK_UNION 354
#define TOK_TwoDots 355
#define TOK_ThreeDots 356
extern YYSTYPE asn1p_lval; extern YYSTYPE asn1p_lval;
...@@ -98,6 +98,8 @@ static asn1p_value_t * ...@@ -98,6 +98,8 @@ static asn1p_value_t *
%token <tv_str> TOK_hstring %token <tv_str> TOK_hstring
%token <tv_str> TOK_identifier %token <tv_str> TOK_identifier
%token <a_int> TOK_number %token <a_int> TOK_number
%token <a_int> TOK_tuple
%token <a_int> TOK_quadruple
%token <a_int> TOK_number_negative %token <a_int> TOK_number_negative
%token <tv_str> TOK_typereference %token <tv_str> TOK_typereference
%token <tv_str> TOK_capitalreference /* "CLASS1" */ %token <tv_str> TOK_capitalreference /* "CLASS1" */
...@@ -1319,7 +1321,7 @@ Value: ...@@ -1319,7 +1321,7 @@ Value:
$$->value.choice_identifier.identifier = $1; $$->value.choice_identifier.identifier = $1;
$$->value.choice_identifier.value = $3; $$->value.choice_identifier.value = $3;
} }
| '{' { asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ { | '{' { printf("push\n"); asn1p_lexer_hack_push_opaque_state(); } Opaque /* '}' */ {
$$ = asn1p_value_frombuf($3.buf, $3.len, 0); $$ = asn1p_value_frombuf($3.buf, $3.len, 0);
checkmem($$); checkmem($$);
$$->type = ATV_UNPARSED; $$->type = ATV_UNPARSED;
...@@ -1392,6 +1394,17 @@ RestrictedCharacterStringValue: ...@@ -1392,6 +1394,17 @@ RestrictedCharacterStringValue:
$$ = asn1p_value_frombuf($1.buf, $1.len, 0); $$ = asn1p_value_frombuf($1.buf, $1.len, 0);
checkmem($$); checkmem($$);
} }
| TOK_tuple {
$$ = asn1p_value_fromint($1);
checkmem($$);
$$->type = ATV_TUPLE;
}
| TOK_quadruple {
$$ = asn1p_value_fromint($1);
checkmem($$);
$$->type = ATV_QUADRUPLE;
}
/*
| '{' TOK_number ',' TOK_number '}' { | '{' TOK_number ',' TOK_number '}' {
asn1c_integer_t v = ($2 << 4) + $4; asn1c_integer_t v = ($2 << 4) + $4;
if($2 > 7) return yyerror("X.680:2003, #37.14 " if($2 > 7) return yyerror("X.680:2003, #37.14 "
...@@ -1416,6 +1429,7 @@ RestrictedCharacterStringValue: ...@@ -1416,6 +1429,7 @@ RestrictedCharacterStringValue:
checkmem($$); checkmem($$);
$$->type = ATV_QUADRUPLE; $$->type = ATV_QUADRUPLE;
} }
*/
; ;
Opaque: Opaque:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment