c/c ++编译器如何知道错误在哪一行

jma*_*erx 7 c c++ parsing

对此可能有一个非常明显的答案,但我想知道编译器如何知道我的错误所在的代码行.在某些情况下,它甚至知道列.

我能想到的唯一方法是将输入字符串标记为2D数组.这将存储[lines] [tokens].

C/C++可以被标记为1个长1D数组,这可能更有效.我想知道通常的解析方法会保留行信息.

Ale*_*lex 6

实际上大部分内容都在龙书中.编译器执行Lexing/Parsing即:将源代码转换为树形表示.这样做时,每个关键字变量等都与行号和列号相关联.

但是在解析期间,失败的确切原因可能会丢失,并且信息可能会关闭.

  • Lexing通常将源代码转换为令牌流.解析阶段采用令牌流并生成AST来表示源代码. (2认同)