如何解决C语法生成无效的表达式
我正在读一本书namad A Retargetable C Compiler:设计与实现。 本书中的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 ')'
表达式: 任务表达式
然后我将“一元表达式assign-operator赋值表达式”作为赋值表达式
我为一元表达式选择“ sizeof'('type-name')'”
然后我为分配运算符选择“ =”
然后我为分配表达式选择了“条件表达式”
然后我这样得出:
条件表达式->二进制表达式->一元表达式->后缀表达式->主表达式->标识符
因此,我可以生成一个这样的表达式: “ sizeof(int)= 7”
,但是在C语言中无法使用此表达式。 有问题吗?还是我用错误的方式产生了这个表达式?
解决方法
语法上正确的东西并不意味着它在逻辑上是正确的。表达式sizeof(int) = 7
在语法上可能是正确的,但意义不大。因此,您的编译器不会溢出error: syntax error
,而是会正确标记和解释该语句并告诉您error: cannot assign to result of sizeof
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。