好吧,本来不打算回答这个问题的,可是有个除了名词啥也不懂的家伙,不仅仅一个劲儿嘚瑟的展现其才华,还自以为啪啪的给别人打脸,实在是,不得不说两句。
@邱昊宇的答案,我认为有一定的道理,如果注释不支持嵌套的话,那么一个正则文法的词法分析器就搞定了。不过我觉得可能原因也没有这么复杂,既然是注释,注释内的所有文本都被视为注释而被编译器无视之,凭什么注释内的/*,也就是注释开始符号要特殊对待呢?这种语法在设计和实现上都会变得更为复杂。
致眼神不好的用户,请注意上面粗体字即为我对这个问题的答案。
接下来是某人的打脸秀:
首先我们看这个家伙的逻辑:
词法分析是预处理器的一部分
所以呢?
所以预处理器可以处理意味着词法分析处理没问题?
CPU是电脑的一部分,所以电脑可以播放美国大片意味着CPU播放美国大片也没有问题?
这种逻辑还怎么做程序员啊?
预处理器是C语言的一个特色,但是就算是预处理器,也是先对预处理指令、宏和注释等进行语法分析,在这其中自然就包含了词法分析。而如果注释不支持嵌套,那么注释就可以直接用简单的词法分析器搞定,而不用先解析出/*和*/,再在语法分析时去处理。
就这样简单。
借用在知乎学来的某台词:
you know nothing.
========================================================
补充个人眼中的知乎价值观:
1、点赞必须答案基本正确,不因为观点相似。事实正确而非观点合拍。
2、点赞不为顶答案,而是为关注者分享正确观点。
3、吵架先在评论,态度恶劣再开答案批判,并尽可能先匿名回答避免污染时间线。
4、虽然两个人打架都是犯错,但是绝对不意味着每个人要打不还手骂不还口,以直报怨,而非寄希望于青天大老爷。
========================================================
知乎的风气是什么呢?一个答案只要内容详实,看起来各种高大上的名词,就能得到相当不错的赞同,毕竟这边都是一群小白。所以我一点儿也不纠结什么排名和赞同数。
某人三番五次的在评论 @我 ,让我很是烦恼,而这家伙的补充进一步暴露了其根本就没有看明白别人答案的实力,却喜欢乱喷。。我从来不反对在知乎喷一些错谬百出的答案,但是你要喷别人,至少肚子里要有货。
我认为有一定的道理,如果注释不支持嵌套的话,那么一个正则文法的词法分析器就搞定了。
这是我上面第一次发答案的时候的原话,然后这个到现在为止连真名都不肯透露的所谓知乎用户,到第四次修改答案的时候才意识到,正则文法的词法分析器搞不定这个问题,但这个问题也不是很复杂。
然后不断地补充显摆其专业知识,殊不知大家根本不在一个层次。
再来看
@邱昊宇的答案:
早年的词法分析器一般都是用效率比较高的有限状态机,有限状态机什么都好,就是不支持嵌套注释。要支持,就得加个符号栈,但这对其它部分的解析没有太大帮助。
这位匿名用户在喷了别人,改了三次答案之后,才发现这个问题:
但是,配合一个计数器完全能实现/**/的嵌套。(参见附录代码里注释掉的功能 )
就这样还有脸去喷别人,真是令人叹为观止,,,,,
我要是这家伙早就捂着脸删答案走人了。
至于:
我表示很无语,,,,
历史遗留。
---
以下为瞎扯,不一定正确:
早年的编译器一般都是词法分析和语法分析分开的。词法分析,是把源代码从文本流转换为符号流,比如关键字、加号、减号、字符串、数字、注释。
早年的词法分析器一般都是用效率比较高的有限状态机,有限状态机什么都好,就是不支持嵌套注释。要支持,就得加个符号栈,但这对其它部分的解析没有太大帮助。
当时来说,无法支持嵌套注释和获得较高的效率相比不值一提。