我如何理解像
这样的表达式的解析a = b+++++b---c--;
在C?
我刚刚编写了上面的表达式,是的,我可以使用任何编译器检查结果,但我想知道的是基本规则我应该知道理解这样的解析C中的表达式。
答案 0 :(得分:5)
从标准6.2(4):
如果输入流已被解析为预处理令牌,直到给定的字符,那么 下一个预处理令牌是可构成一个的最长字符序列 预处理令牌。
他们甚至添加了例子:
示例2程序片段x +++++ 被解析为x ++ ++ + y,其中 违反增量约束 运算符,即使解析x ++ + ++ y可能会产生正确的表达式。
所以你的陈述:
a = b+++++b---c--;
相当于:
a = b ++ ++ + b -- - c -- ;
答案 1 :(得分:2)
所涉及的运营商包括++
,--
,+
和-
。一些parantheses和space会在这里有所帮助:
a = ((b++)++) + (b--) - (c--);
我不知道解析是如何工作的,但是没有涉及歧义(好的,有,请看Dingo的答案),所以我想这可以通过一些简单的规则来完成,例如: / p>
+
和-
合并了两个“表达式”++
和--
是“表达式”的后缀要消除歧义,您可以为++
和--
提供比+
和-
更高的优先级。
答案 2 :(得分:1)
我知道你对解析器有多了解,所以以防万一: http://en.wikipedia.org/wiki/LL_parser
如果您需要正式的语法描述,请查看解析器生成器的描述:https://javacc.dev.java.net/servlets/ProjectDocumentList?folderID=110