[英]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;
我在這里沒看到什么?
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]
優先於前綴限定符*
,這是表達式的常規模式。 與聲明的語法相比如何? 為什么要做出這個決定?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.