如何解决野牛/ yacc语法“ |”运作不佳
我试图用野牛分析下面的文字。
signed int c1;
unsigned int c2;
这是野牛的定义。我删除了所有动作,因为它解释起来很复杂,没有必要。
%type <type_enum> simple_type // enum
%type <str> opt sign // char*
%type <ival> opt sign // int
%%
simple_type: opt_sign opt_sign_type
opt_sign: SQL_SIGNED
| SQL_UNSIGNED
| /* EMPTY */
;
opt_sign_type: SQL_SHORT
| SQL_SHORT INT
| INT
| SQL_LONG
| SQL_LONG INT
| SQL_LONG SQL_LONG
| SQL_LONG SQL_LONG IN
| SQL_BOOL
| BYTE
| CHAR
| SQL_CONTEXT
| STRING
| CCILEN
| VARCHAR
;
%%
关于变量名的语法是在较高层上定义的,因为存在更多类型,而不仅仅是'simple_type'。下面是它们。
type: simple_type
| struct_type
| struct_nType
| union_type
| enum_type
| ident
;
ident: IDENT
;
解析器在signed int c1;
上运行良好,但在unsigned int c2;
上,类型被分类为ident
而不是simple_type
。
当我在IDENT(=$1)
的情况下打印ident
时,它是“未签名的”。
为什么解析器不能用于“未签名”?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。