首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语法生成无效的表达式

C语法生成无效的表达式
EN

Stack Overflow用户
提问于 2020-09-28 19:44:00
回答 1查看 88关注 0票数 2

我正在读一本书namad A Retargetable C Compiler: Design and Implementation。在本书中,C语言语法是这样指定的:

代码语言:javascript
复制
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 ')'

关于我观察到的一些事情,我有一个问题:

代码语言:javascript
复制
expression:
    assignment-expression

我把assignment-expression放在了unary-expression assign-operator assignment-expression上。

对于一元表达式,我选择"sizeof '(' type-name ')'"

然后我选择"="作为赋值操作符。

然后我选择"conditional-expression"作为赋值表达式。

然后我像这样推导:

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

以上所有操作的结果是,我可以生成如下表达式:"sizeof(int) = 7"

但是这个表达式在C语言中是不可能的。上面的语法列表有问题吗,或者我用错误的方式生成了这个表达式?

EN

回答 1

Stack Overflow用户

发布于 2020-09-28 20:19:28

语法正确并不意味着它在逻辑上是正确的。表达式sizeof(int) = 7在语法上可能是正确的,但它没有多大意义。因此,您的编译器将正确地对语句进行标记和解释,并告诉您error: cannot assign to result of sizeof,而不是溢出error: syntax error

关于这个主题,您可能会对Annex A.1 Lexical grammar in C11 standard draft感兴趣。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64101540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档