繁体   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