【发布时间】:2017-01-23 13:48:46
【问题描述】:
我在用 Bison 编写的 ASN.1 编译器中遇到问题。
A OCTET STRING (CONTAINING B)
编译器忽略 CONTAINING B 并将数据称为 OCTET STRING 而不是将其称为 B。 这是当前规则:
OctetStringType :
OCTET STRING Constraint { $$ = new OctetString($3); } |
OCTET STRING '{' NamedOctetList '}' Constraint { $$ = new OctetString($6); }
;
我尝试创建新规则:
OctetStringType :
OCTET STRING '('ContentsConstraint')' {}|
OCTET STRING Constraint { $$ = new OctetString($3); } |
OCTET STRING '{' NamedOctetList '}' Constraint { $$ = new OctetString($6); }
;
ContentsConstraint :
CONTAINING Type { }
;
当我尝试打印结果时:
OCTET STRING '('ContentsConstraint')' {printf("$$: %s\n",$$);}
我得到 A。 如何访问 B?是否必须修改这些规则才能访问 B?
【问题讨论】:
-
实际上,
OCTET STRING (CONTAINING B)是一个OCTET STRING,而不是一个类型B。只有八位字节字符串中传输的字节是B的某种编码。
标签: compiler-construction bison compiler-optimization asn.1