【发布时间】:2021-11-09 19:24:48
【问题描述】:
我最近研究并构建了一个玩具 java 编译器,它在解析阶段之前丢弃所有注释标记和空白标记。但是,我很好奇对空格敏感的语言(例如 Python 和 Swift)如何处理换行符。这些语言以语句的换行符结尾,因此不能简单地丢弃换行符。但是他们如何处理下面的情况呢?
foo(
bar
)
他们必须为此编写大量语法案例吗?比如foo ( bar )、foo NEWLINE ( bar NEWLINE )等等?
在我构建的 java 编译器中,这是通过消除换行符来处理的,它们都变成了foo ( bar )。但是这在空格敏感的语言中是如何处理的呢?
【问题讨论】:
-
您可能需要查看解析器源代码才能找到答案。对于 Swift:词法分析器:github.com/apple/swift/blob/…,解析器:github.com/apple/swift/blob/…
-
一般来说,虽然我认为没有人愿意在他们的作品中维护所有可能的 NEWLINE 终端组合,所以我想他们要么使用一些预处理步骤(如自动分号插入),要么以某种方式在词法分析器级别处理它.
标签: parsing compiler-construction