大多数 C/C++ 编译器如何为数组创建标记?

仅有的一个

所以我想我有 2 个与大多数 c/c++ 编译器相关的问题:

1.当大多数c/c++编译器的scanner看到MyArray[20]这样的东西时,它创建的token是什么?大多数编译器是否会创建像array_tokenarray_token[const_int]或...这样的标记(我想知道将数组大小变成令牌后会发生什么变化)这个问题与我的第二个问题有关

2. 当我们在代码中间(不是在声明中)编写类似 MyArray[20.5] 的东西时,解析器是使用语法检测到这个错误还是我们只能使用语义例程检测到这个错误?

重要说明:我说的是大多数 c/c++ 编译器和最通用的方式,我知道一些罕见的编译器可能会以不同的方式执行,但大多数编译器如何操作?什么是常态?或者至少最流行的编译器是如何工作的?(在我们的考试中,他们只是说它的 ac/c++ 编译器,所以我们只需要假设它的行为就像大多数编译器一样)

我对第二个问题的看法:

我认为解析器无法检测到这一点,因为我们可以在 MyArray[I*j] 之类的范围内有一个表达式,因此我们的语法中有类似 S--> array_token[expression] 的东西,并且由于表达式中可以有浮点数,所以因此解析器不会检测到错误,但如果我错了,请纠正我。

sepp2k
  1. 根据 ISO C 标准中描述的词法规则,MyArray[20]是一个标识符,后跟 a [,后跟一个整数常量,后跟 a ]我希望大多数(甚至全部)C 编译器都能像那样表示它。没有标准中定义的数组令牌或我所知道的任何实现之类的东西。

  2. 数组下标的语法规则是:

    postfix-expression:  postfix-expression [ expression ]
    

    MyArray[20.5]匹配该规则,因此在语法上是有效的。这是类型错误,而不是语法错误。因此,语义分析器的工作是检测该错误。

  3. (回应你的评论)

    如果我们有像 INT array[10.5] 这样的东西,它会变成这个 -------> int id[const_token] 因此解析器会检测到这个正确吗?(这次我在声明中谈论)因为我们可以在语法中使用像 S--> id[int_const] 这样的规则

    数组声明符的 C89 1语法规则(在声明之后的部分int)如下:

     direct-declarator: direct-declarator [ constant-expressionopt ]

    array[10.5]匹配该规则(因为direct-declarator: identifier是另一条规则),因此int array[10.5]语法上有效的声明也是如此再说一次,这是一个语义错误,而不是一个句法错误。

    PS:请注意,constant-expression它只是简单地定义为conditional-expression. 表达式实际上应该是常量这一事实不是由语法强制执行的,也是一种语义属性。


1我使用了 C89 中的规则,因为它比以后的版本更简单。但是,以后的版本在与问题相关的方式上没有区别。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得scikit学习分类器的大多数信息功能?

为什么大多数串行器使用流而不是字节数组?

无需大多数编解码器即可编译FFMpeg

如何获得不同类的scikit-learn分类器的大多数信息功能?

Matlab-数组中大多数重复的值(不仅仅是模式)

大多数编译器会将%2转换为位比较吗?真的更快吗?

R中的小提琴图将大多数组归类为“其他”类别?

我可以安全地假设* nix系统上所有(或大多数)“ cc”都支持“ -Wall”吗?

如何从大多数网站获取Twitter链接-Python

大多数编译器是否优化MATMUL(TRANSPOSE(A),B)?

需要创建程序来查找大多数雇员的部门

为什么大多数编译器使用AST,而不是直接生成IR?

如何创建与大多数列匹配的Pandas列?

Autohotkey:如何清除Windows分配的大多数Fnn热键?

如何使用Mvvmcross访问Xamarin iOS中的大多数顶视图控制器?

大多数浏览器无法加载图像

如何使用Sync Framework同步使用大多数相同数据重新创建的表?

用于从多维数组中的多行中分离大多数公共元素的高效算法

日历的大多数语义标记:时间,日期容器和事件的列表

大多数Android应用程序如何从数据库服务器检索数据?

如何从(大多数)图片中提取RGB值?

在大多数示例中,为什么在“ this”时创建新变量

哪个对象的数组具有大多数特定对象

如何获得大多数嵌套值?

Google Places API 在地图上放置多个标记并缩放到大多数标记所在的位置

如何为可以在任何/大多数硬件上启动的 ubuntu 18.04 服务器处理/创建灾难备份

Python3 帮助确定动态创建列表的大多数 Pythonic 方法

尝试为大多数重叠点创建颜色图

创建一个 Powershell 脚本来禁用大多数 SQL 服务器登录