提问人:pramington 提问时间:10/6/2014 最后编辑:pramington 更新时间:10/6/2014 访问量:395
证明类型声明语法的语法歧义
Proving syntactic ambiguity of type declaration grammar
问:
给定实现 C 样式类型声明的语法:
Declaration ::= Type Declarator ;
Type ::= int | char
Declarator ::= * Declarator
| Declarator [ num ]
| Declarator ( Type )
| ( Declarator )
| name
我必须证明句法的歧义。我很难识别模棱两可的情况。以下是我提出的满足语法的以下所有情况:
int * Declarator;
char * Declarator;
int Declarator[num];
char Declarator[num];
int Declarator(type);
char Declarator(type);
int Declarator;
char Declarator;
int name;
char name;
我在这里没有看到什么?
答:
3赞
rici
10/6/2014
#1
是三个指针的数组还是指向三个 int 数组的指针?怎么样 ?int *something[3]
int **something[3]
C 标准附录 A 中的简化 C 语法包括:
(Many productions omitted) declarator: pointeropt direct-declarator pointer: '*' | '*' pointer direct-declarator: identifier '(' declarator ')' direct-declarator '[' assignment-expressionopt ']'
这如何解决上述歧义?
另外,请考虑表达式和声明。在表达式中,后缀限定符优先于前缀限定符,这是表达式的正常模式。这与声明的语法相比如何?为什么做出这个决定?*a[3]
int *a[3]
[3]
*
评论
Declarator
是非终端,就像.你不应该输入一个你想分析的字符串,你必须把它简化为一系列终端。type
Declarator