去除代码中的注释(一)设计思想

编译器的第一个工作是需要去除代码中的注释。这里分析的代码是C源代码。我们知道在C代码中,有两种类型的注释。1. 块注释。以/*开头,以*/结尾,可以饱含多行。2. 行注释。以//开头直至末尾。要去除这两块的注释本身不是难事,比较麻烦的是处理有双引号的情形。例如考虑下面的代码段。int main(){ printf("/* Hello the world");}在这段代码中,虽
摘要由CSDN通过智能技术生成

编译器的第一个工作是需要去除代码中的注释。这里分析的代码是C源代码。我们知道在C代码中,有两种类型的注释。

1. 块注释。以/*开头,以*/结尾,可以包含多行。

2. 行注释。以//开头直至行末尾。

要去除这两块的注释本身不是难事,比较麻烦的是处理有双引号的情形。例如考虑下面的代码段。

int main()
{
	printf("/* Hello the world");
}
在这段代码中,虽然出现块注释起始符‘/*’,但是不可以将‘/*’后面的字符串看做是注释,因为’/*’出现在双引号内。


为了删除注释,我们需要定义如下非终结符。

<prog>表示整个源代码段,它是文法定义中的初始非终结符。

<line_comment>表示代码段中的行注释片断。

<block_comment>表示代码段中的块注释片断。

<quote>表示代码段中的引用字符串,即C语言中的字符串常量。

<norm_block>表示代码段中非注释,非引用的片段。


一个代码段本质是一个字符串,而一个字符串由一列的字符组成。接下来我们将源码中可能出现的字符进行分类。


<norm_char>:普通字符。包括a-zA-Z0-9_,运算符,括号,空格,单引号等。这类字符在删除注释时,无需特殊处理。

<double_quote_mark>:双引号。是引用字符串的开始和结束标记。

<enter>&#x

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值