大嘴法(贪心法)

本文探讨了编译原理中符号解析的过程与贪心法的应用。通过实例解释了如何识别程序中的符号,并避免因空白符导致的解析错误。此外,还提供了一些练习题解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个字符一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已经不再可能组成一个有意义的符号。


注意;除了字符串与字符常量,符号的中间不能嵌有空白(空白符,制表符,换行符)


例如:a---b与表达式a --  - b的含义相同,而与a - --b含义不同


例如:y= x/*p                       /*被理解为一段注释的开始,编译器将不断读入字符直到遇到*/为止

将上式重写为:

y=x/   *p或y=x/(*p)即可


练习1-3   为什么n-->0的含义是n--  >0,而不是n-  ->0?


根据贪心法可知


练习1-4  a+++++b的含义是什么?


是   a++   +    ++b

也许这不符合贪心法,但若相当于((a++)++)+b,是不合法的,,,,因为a++不能当左值






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值