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

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

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

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


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









关注
打赏
查看更多评论

段智华

暂无认证

  • 3浏览

    0关注

    1232博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录