词法分析中的“贪心法”

简介: 词法分析中的“贪心法”


陷进问题引入

#include <stdio.h>
int main()
{
  int a = 1;
  int b = 2;
  int* c = &b;
  printf("%d", a/*c);
  return 0;
}
  • 问: 上面代码输出什么?
      有人说是0, 也有人说程序出错,说0的是想着a除(c), 说程序出错的是因为将 / 看做注释符号,因此程序出错。也就是当出现/这种多字符符号时,编译器是将其当成单字符‘ / ’ 和“ * ”两个字符,还是当成‘ / ’多字符。那如此有争议性的问题,是否有一个规则来解决其中的二义性呢?
      这就是词法分析的贪心法,口语化也可以说作“大嘴法”。

贪心法的解释

  编译器分辨符号的方法是:从左到右一个字符一个字符的读入如果这个字符可能组成一个符号,那么再读入下一个字符,判断已经读入的字符组成的字符串是否可能组成一个符号,如果可能,继续读入下一个字符,重复上述判断,直到读入的字符已经不再可能组成一个有意义的符号,才停止判断。

  需要注意的是,除了字符串与字符常量,符号的中间不能有空白(空格符,制表符和换行符)。例如:

a---b 和 a -- - b的含义相同。

a---b 和 a - -- b的含义不相同。


所以,a/*c 会出现程序报错的情况,因为当出现 /* 后,后面一直没有接受到注释结束符号 */ 。

一个小题目

请问 a+++++b 的含义是什么?

按照贪心法的解释来推断,得到 ((a++)++) + b。那么放到编译器里是什么样的呢?

#include <stdio.h>
int main()
{
  int a = 1;
  int b = 2;
  printf("%d", a+++++b);
  return 0;
}

运行后如下:

原因是(a++)的结果不能作为自增++的操作数,因此报错。


  😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

相关文章
|
人工智能
AI代码生成器——Codeium
【2月更文挑战第21天】AI代码生成器——Codeium
2084 1
AI代码生成器——Codeium
|
传感器 机器人 物联网
传感器类型分类
传感器类型分类
1476 0
|
安全 算法 物联网
网络安全与信息安全:漏洞、加密技术与安全意识
网络安全和信息安全一直是当今社会中备受关注的话题。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的知识,并引发对于个人和组织在网络空间中保护自身信息安全的思考。
235 28
|
8月前
|
存储 运维 Kubernetes
K8s 持久化存储怎么选?别只盯着性能,能不能活下来更重要
K8s 持久化存储怎么选?别只盯着性能,能不能活下来更重要
519 6
|
3月前
|
Web App开发 存储 Linux
旧手机如何组建集群,跑点云计算?
UC San Diego 与 Google 合作推进“手机集群计算”:拆解退役手机主板,组建低碳小型计算集群。首期将部署 2000 台 Pixel 手机主板,替代传统服务器,为教学科研提供低成本云资源,兼顾环保与算力复用。
402 1
旧手机如何组建集群,跑点云计算?
|
11月前
|
机器学习/深度学习 编解码 自然语言处理
深入BERT内核:用数学解密掩码语言模型的工作原理
BERT通过掩码语言建模(MLM)实现双向语言理解,随机遮蔽15%的词并预测,结合Transformer的自注意力与多头机制,利用上下文信息生成深层语义表示。其数学设计如√d_k缩放、80-10-10掩码策略和交叉熵优化,显著提升模型性能,奠定现代NLP基础。
724 8
|
缓存 监控 搜索推荐
301重定向实现原理全面解析:从HTTP协议到SEO最佳实践
301重定向是HTTP协议中的永久重定向状态码,用于告知客户端请求的资源已永久移至新URL。它在SEO中具有重要作用,能传递页面权重、更新索引并提升用户体验。本文详解其工作原理、服务器配置方法(如Apache、Nginx)、对搜索引擎的影响及最佳实践,帮助实现网站平稳迁移与优化。
1618 68
|
数据采集 数据挖掘 BI
Dataphin功能Tips系列(67)如何将BI报表纳入资产管理
Dataphin通过采集BI报表元数据,实现报表资产的信息完善与上架管理,助力企业构建统一的数据资产门户。以QuickBI为例,介绍如何配置应用系统、创建采集任务,并实现报表资产的统一管理与跳转分析。
342 9
|
存储 机器学习/深度学习 人工智能
如何评估云服务提供商?
【6月更文挑战第21天】如何评估云服务提供商?
531 3
|
JavaScript 容器
Vue3折叠面板(Collapse)
该组件提供了一个高度可定制的折叠面板,支持多种属性设置,包括折叠面板数据、激活状态、禁用选项、边框风格、复制功能等,并可通过插槽进行进一步自定义。其丰富的样式控制选项使得面板能够适应各种场景需求。在线预览展示了不同配置下的效果。组件基于 Vue 3 开发,利用 `requestAnimationFrame` 模拟实现动画效果,并集成了按钮等其他自定义组件。
1048 1
Vue3折叠面板(Collapse)

热门文章

最新文章