您当前的位置: 首页 >  大数据

段智华

暂无认证

  • 0浏览

    0关注

    1232博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

大数据Spark “蘑菇云”行动第104课:Hive源码大师之路第二步:Hive真正的入口、词法分析和语法分析

段智华 发布时间:2016-12-24 22:12:01 ,浏览量:0

大数据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";

 对一棵树进行语法分析的时候会采用什么算法? 递归
 深度优先遍历和广度优先遍历? 

关注
打赏
1659361485
查看更多评论
立即登录/注册

微信扫码登录

0.0450s