【发布时间】:2018-10-02 03:14:15
【问题描述】:
所以我想我有 2 个与大多数 c/c++ 编译器相关的问题:
1。 当大多数 c/c++ 编译器的扫描器看到类似 MyArray[20] 的东西时,它创建的令牌是什么?大多数编译器会创建像 array_token 或 array_token[const_int] 或...这样的令牌吗? (我想知道将它变成令牌后数组大小会发生什么) 这个问题和我的第二个问题有点关系
2。 当我们在代码中间(而不是在声明中)编写类似 MyArray[20.5] 的内容时,解析器是使用语法检测到这个错误还是我们只能使用语义例程检测到这个错误?
重要提示:我说的是大多数 c/c++ 编译器和最通用的方式,我知道一些罕见的编译器可能会以不同的方式执行此操作,但如何做大多数编译器的行为?什么是规范?或者至少最流行的编译器是如何工作的? (在我们的考试中,他们只是说它是一个 c/c++ 编译器,所以我们只需要假设它就像大多数编译器一样)
我对第二个问题的看法:
我认为解析器无法检测到这一点,因为我们可以在 MyArray[I*j] 这样的范围内有一个表达式,因此我们的语法中有类似 S--> array_token[expression] 的东西,因为表达式可以有 float在其中,因此解析器不会检测到错误 但如果我错了,请纠正我。
【问题讨论】:
标签: compiler-errors compiler-construction compiler-warnings