大数据Spark “蘑菇云”行动第104课:Hive源码大师之路第二步:Hive真正的入口、词法分析和语法分析
大数据Spark “蘑菇云”行动第104课:Hive源码大师之路第二步:Hive真正的入口、词法分析和语法分析
HiveLexer.g hiveParser.g自动代码生成了HiveParser.class 文件,这个反人类的代码自动生成了5万多行,改元代码的话新人不要去改HiveParser.class 文件,要去修改 hiveParser.g文件,类似android的机制。
如果想增加新的语法,请修改HiveParser.g文件
如果想引入新的关键字,修改 HiveLexer.g
SemanticAnalyzer是目前为止最重要的类,包含了语义分析和绝大多数的优化 。是手写的,10000多行。修改的话,改这个类。这个类必须看的。类似spark sql
ParseDriver pd = new ParseDriver();
ASTNode tree = pd.parse(command, ctx);
/**
* Parses a command, optionally assigning the parser's token stream to the
* given context.
*
* @param command
* command to parse
*
* @param ctx
* context with which to associate this parser's token stream, or
* null if either no context is available or the context already has
* an existing stream
*
* @return parsed AST
*/
public ASTNode parse(String command, Context ctx, boolean setTokenRewriteStream)
HiveLexerX lexer = new HiveLexerX(new ANTLRNoCaseStringStream(command));
TokenRewriteStream tokens = new TokenRewriteStream(lexer);
public class SemanticAnalyzer extends BaseSemanticAnalyzer {
public static final String DUMMY_DATABASE = "_dummy_database";
public static final String DUMMY_TABLE = "_dummy_table";
public static final String SUBQUERY_TAG_1 = "-subquery1";
public static final String SUBQUERY_TAG_2 = "-subquery2";
对一棵树进行语法分析的时候会采用什么算法? 递归 深度优先遍历和广度优先遍历?