Kotlin使用了第三方开源的JFlex作为词法分析器,并没有自己实现(当然,重复造轮子就是一件很愚蠢的事情了:))。 2.1.1 定义JFlex词法分析配置文件Kotlin.flex 配置文件分为三个部分: 用户代码:。 2.1.2 词法分析器_JetLexer JFlex会读取配置文件并生成一个词法分析器(扫描器),在Kotlin编译器中对应_JetLexer /** * This class is a scanner generated by * JFlex 1.7.0-SNAPSHOT * from the specification file 上述的方法以“yy”为前缀,表示它们是由JFlex自动生成的,避免与复制到这个类中的用户代码名字有冲突。
为 FE 的核心代码模块 ├── main │ ├── cup // 语法定义文件 │ ├── java // 主代码 │ ├── jflex
团队用JFlex(Java工具)生成优化后的词法分析器,把日志模式编译成高效代码,而非 runtime 解析复杂正则。
(Dynamic Key Feature Forward) 词法分析算法与 DLRD (Double Layer Recursive Descent)语法分析算法,避免使用 javacc、antlr、jflex
lib/jcl-over-slf4j-1.7.7.jar /usr/share/cassandra/lib/jctools-core-1.2.1.jar /usr/share/cassandra/lib/jflex 1.7.7.txt /usr/share/cassandra/lib/licenses/jctools-core-1.2.1.txt /usr/share/cassandra/lib/licenses/jflex lib/jcl-over-slf4j-1.7.7.jar:/usr/share/cassandra/lib/jctools-core-1.2.1.jar:/usr/share/cassandra/lib/jflex
getSqlMode()); SqlParser parser = new SqlParser(input); 从连接中读取原始语句字符串 词法解析文件 • fe/fe-core/src/main/jflex partition, distribution, tblProperties, extProperties, tableComment, index); :} fe/fe-core/src/main/jflex
,D:\大三下\编译原理\cup\java-cup-11a.jar,E:\java\jflex\lib\J //-sourcepath Flex.jar] [类文件的搜索路径: C:
,D:\大三下\编译原理\cup\java-cup-11a.jar,E:\java\jflex\lib\J //-sourcepath Flex.jar] [类文件的搜索路径: C:
,D:\大三下\编译原理\cup\java-cup-11a.jar,E:\java\jflex\lib\J //-sourcepath Flex.jar] [类文件的搜索路径: C:
,D:\大三下\编译原理\cup\java-cup-11a.jar,E:\java\jflex\lib\J //-sourcepath Flex.jar] [类文件的搜索路径: C:
lib/jcl-over-slf4j-1.7.7.jar:/usr/share/cassandra/lib/jctools-core-1.2.1.jar:/usr/share/cassandra/lib/jflex
JFlex - A lexical analyzer generator.
JFlex -词汇分析仪 配置 (Configuration) Libraries that provide external configuration.提供外部配置的库。
JFlex - A lexical analyzer generator. Configuration Libraries that provide external configuration.
Parse阶段 词法分析采用jflex技术,语法分析采用java cup parser技术,最后生成抽象语法树(Abstract Syntax Tree)AST,这些都是现有的、成熟的技术,在这里不进行详细介绍