簡體   English   中英

證明類型聲明語法的句法歧義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM