词法分析中的“贪心法”

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


陷进问题引入

#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---ba -- - b的含义相同。

a---ba - -- 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++)的结果不能作为自增++的操作数,因此报错。


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

相关文章
|
人工智能 Java API
Python 潮流周刊#28:两种线程池、四种优化程序的方法
Python 潮流周刊#28:两种线程池、四种优化程序的方法
194 1
|
10月前
|
SQL
【YashanDB知识库】like 变量的SQL语句应用程序执行效率低与yasql执行效率高
【YashanDB知识库】like 变量的SQL语句应用程序执行效率低与yasql执行效率高
|
Rust Java C++
Rust生态系统与社区支持:跨语言比较的探究
【2月更文挑战第1天】本文旨在比较Rust语言与其他主流编程语言(如Python、Java、C++)在生态系统与社区支持方面的差异与优势。我们将从标准库、第三方库、工具链、社区活跃度和文档质量等多个维度进行深入分析,以揭示Rust在这些方面所展现出的独特之处和潜力。
|
SQL NoSQL 关系型数据库
基础版本抖音(字节跳动青训)
本抖音项目是基于grpc通讯协议开发的高性能微服务,不仅使用gin作为业务层框架,gorm框架作为持久层框架,还使用预编译sql防止sql注入,同时该项目结合连接池技术来构建连接工厂和复用grpc连接来提高系统的性能,这样可以有效的处理高并发场景下的挑战,还可以通过减少频繁创建和销毁grpc连接带来的性能开销
|
缓存 算法 安全
深入理解操作系统内存管理:分页系统的优势与挑战
【2月更文挑战第30天】 在现代操作系统中,内存管理是核心功能之一,它负责将有限的物理内存资源分配给多个并发运行的进程。分页系统作为内存管理的一种流行技术,其通过虚拟到物理地址的映射提供了程序的逻辑地址空间,并允许更高效的内存分配和保护。本文旨在探讨分页系统的关键优势,包括其如何提升内存利用率、实现内存保护以及支持多任务处理。同时,我们也将分析分页机制带来的挑战,诸如页面置换算法的效率问题、页表管理和TLB(Translation Lookaside Buffer)的维护等。
|
存储 算法
顺序表专题
顺序表专题
118 4
|
druid Java 数据库
数据库连接池 druid
数据库连接池 druid
512 0
数据库连接池 druid
|
运维 Kubernetes 持续交付
Docker与Kubernetes:容器化技术的黄金搭档
【6月更文挑战第10天】Docker和Kubernetes是容器化技术的黄金组合,Docker提供轻量级、可移植的容器引擎,简化应用部署,而Kubernetes作为容器编排系统,实现自动化部署、扩展和管理,确保高可用性和可扩展性。两者的协作使得容器化应用更高效、可靠,共同推动软件开发和运维的创新。
赛事短视频+体育直播,网络赛事直播系统开发新玩法
短视频平台的兴起为体育赛事带来了一场全新的变革。这种“打开方式”赛事直播不仅在内容风格和聚合方式上展现出优势。如下参考东莞梦幻网络科技的《体育直播系统源码》为短视频观赛提供了全新的解决方案,详细介绍短视频模块如何为体育赛事平台注入了新的生机。
|
存储 NoSQL 索引
搜索算法——顺序查找
笔者看了很多的数据结构的书籍,在这过程中走了很多的弯路,希望看到这个教程的读者能够少走一些弯路,其实很多的教程和文章故弄玄虚,将简单的内容做的复杂,往往看了很久不知道所云,我的教程一定要让读者能在最快的路上学会知识。用生活的例子贴切的解决问题,主要的服务者是所有愿意学习数据结构的同学和考研的同学。
373 0
搜索算法——顺序查找