【发布时间】:2017-05-16 06:44:06
【问题描述】:
我正在尝试构建我的第一个类似 C 的编程语言,可能是解释器,而我刚刚迈出了第一步,也就是词法分析器。
我曾考虑采用惰性路线,只需对整个源代码流进行词法分析,然后让解析器处理数据。
我注意到许多其他编译器和解释器仅在解析器模块请求另一个令牌时才在解析期间进行 lex。
在代码性能方面,对于程序而言,一次对所有源代码进行 lex 源代码然后解析生成的标记或 lex 并单独解析标记是否更快?
【问题讨论】:
-
按需 lex 更快。否则,您会增加巨大的延迟:在词法分析完成之前,甚至无法开始解析。
-
为什么会更快呢?我正在尝试理解这个理论。
-
总的来说,我认为这是一个很好的问题,但它不适合 StackOverflow。 StackOverflow 需要特定的问题,这是一个非常广泛的问题,试图涵盖词法分析可能发生的所有方式。因此,我投票结束。
-
要给出一些答案,这取决于。某些语言/语法的设计使您不必对整个输入进行 lex/parse 来获得一些输出,例如设计 RTF 的原因之一是当内存不足时,数百或数千页的文本文件只能通过 lex/parse 标题读取,然后向前扫描到分隔页面的某些标签。一旦到达页面标签,就可以对该页面进行完整的 lex/parse。
标签: parsing compiler-construction interpreter lex