对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.
谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.
要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:
我经常听到C++是一种上下文敏感语言的说法.请看以下示例:
a b(c);
Run Code Online (Sandbox Code Playgroud)
这是变量定义还是函数声明?这取决于符号的含义c.如果c是变量,则a b(c);定义名为btype 的变量a.它是直接初始化的c.但是如果c是一个类型,则a b(c);声明一个名为a的函数b,c并返回一个a.
如果您查找无上下文语言的定义,它基本上会告诉您所有语法规则必须具有仅由一个非终端符号组成的左侧.另一方面,上下文敏感语法允许左侧的任意字符串的终端和非终端符号.
浏览"C++编程语言"的附录A,除了左侧的单个非终端符号之外,我找不到单个语法规则.这意味着C++是无上下文的.(当然,在无上下文语言形成上下文敏感语言的子集的意义上,每种无上下文语言也都是上下文敏感的,但这不是重点.)
那么,C++是无上下文还是上下文敏感?
c++ syntax grammar context-free-grammar context-sensitive-grammar
我是C++的新手.我经常看到如下条件语句:
if
statement_0;
else if
statement_1;
Run Code Online (Sandbox Code Playgroud)
题:
从语法上讲,我应该将其else if视为单个关键字吗?或者它实际上是如下所示if的外部嵌套语句else?
if
statement_0;
else
if
statement_1;
Run Code Online (Sandbox Code Playgroud) 可能重复:
C++是无上下文还是上下文相关?
对于熟悉编译器的人来说,这可能是一个愚蠢的问题,但老实说我对答案一无所知.
C++语法是上下文敏感的吗?换句话说,C++语法是否无法用无上下文语法表达?
很明显,C++ 是使用常规解析工具解析的,并且解析并不是特别无效(!),但我确实记得读过这个(我不记得在哪里),我想我会在传播之前直接了解社区谎言......也许C++的一个子集是CS?也许新的规格?任何帮助表示赞赏.
编辑:感谢所有的回复.但是,为了完整起见,编译的哪个部分处理歧义?CFG是一种语法,在规则的左侧只有一个非终端符号(例如A->zC),CSG是在左侧有一个终端(加上一个非终端)的语法(aAv->QT),其中大写字母是非终结符,小写是终结符.在解析 C++源代码的语法中是否有像后者那样的表示?
我收到错误"预期"('用于函数式转换或类型构造',并尽我所能在线研究此错误的含义,但无法找到导致此错误的原因的任何文档.
我发现错误的Stack Overflow上的所有相关问题修复了特定的代码片段,并没有更一般地解释导致错误的原因.
这些包括
我可以获得一个文档风格的答案,翻译"功能式演员"和"类型构造"的意思是简单的英语吗?什么时候编译器选择抛出此错误而不是其他错误?
我不想要一个特定于我自己的错误的答案,但是根据要求,这是我的MCVE
#include <boost/integer_traits.hpp>
class Test{
const double MAX_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
const double MIN_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
};
Run Code Online (Sandbox Code Playgroud)
我被引导相信这种语法是可能的,通过这个答案/sf/answers/191700351/