簡體   English   中英

C 語法生成無效表達式

[英]C grammar generates invalid expression

我正在讀一本書 namad A Retargetable C Compiler: Design and Implementation。 在本書中,C語言語法是這樣規定的:

expression:
  assignment-expression { , assignment-expression }
assignment-expression:
  conditional-expression
  unary-expression assign-operator assignment-expression
assign-operator:
  one of= += -= *= /= %= <<= >>= &= A= I=
conditional-expression:
  binary-expression [ ? expression : conditional-expression ]
binary-expression:
  unary-expression { binary-operator unary-expression }
binary-operator:
  one of || && '|' A & == ! = < > <= >= << >> + - * | %
unary-expression:
  postfix-expression
  unary-opera tor unary-expression
  '(' type-name ')' unary-expression
  sizeof unary-expression
  sizeof '(' type-name ')'
unary-operator:
  one of ++ -- & * + - - !
postfix-expression:
  primary-expression { postfix-operator }
postfix-operator:
  '[' expression ']'
  '(' [ assignment-expression { , assignment-expression } ] ')'
. identifier
-> identifier
++
--
primary-expression:
  identifier
  constant
  string-literal
  '(' expression ')'

我有一個關於我觀察到的東西的問題:

expression:
    assignment-expression

我把unary-expression assign-operator assignment-expression作為assignment-expression

我為一元表達式選擇"sizeof '(' type-name ')'"

然后我選擇"="作為賦值運算符。

然后我為賦值表達式選擇了"conditional-expression"

然后我得出這樣的:

conditional-expression -> binary-expression -> unary-expression ->postfix-expression -> primary-expression -> identifier

作為上述所有的結果,我可以生成這樣的表達式: "sizeof(int) = 7"

但是這個表達式在C語言中是不可能的。 上面的語法列表是否有問題,或者我是否以錯誤的方式生成了這個表達式?

某些東西在語法上是正確的並不意味着它在邏輯上是正確的。 表達式sizeof(int) = 7在語法上可能是正確的,但它沒有多大意義。 所以你的編譯器而不是溢出error: syntax error將正確標記和解釋語句並告訴你error: cannot assign to result of sizeof

關於這個話題,您可能對C11 標准草案中的附錄 A.1 詞法語法感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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