gpt4 book ai didi

C 语法生成无效表达式

转载 作者:行者123 更新时间:2023-12-04 08:51:07 25 4
gpt4 key购买 nike

我正在读一本书 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-expressionassignment-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 .
关于这个话题你可能感兴趣 Annex A.1 Lexical grammar in C11 standard draft .

关于C 语法生成无效表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64101540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com