2012-04-23 45 views
5

用什麼類型的語法來解析PostgreSQL?是LR,LALR,LL還是別的?用什麼類型的語法來解析PostgreSQL?

+1

它很可能基於LALR(1)語法;這就是Yacc/Bison正常處理的事情。這可能會有一些複雜性;有時SQL語法會遇到L​​ALR(1)處理的棘手問題。 – 2012-04-23 13:31:28

+3

解析器的源代碼在這裏(最新版本)http://git.postgresql.org/gitweb/?p=postgresql.git;a=tree;f=src/backend/parser;h=904b1b0bb8bddc95b422b27a3d44fd826dedf736;hb=REL9_1_STABLE 它包含標準LEX和YACC定義... – zeFrenchy 2012-04-23 13:35:16

回答

6

PostgreSQL parser基於yacc和lex。由yacc生成的解析器是LALR(1)。你可以閱讀postgres的語法here

+1

直到[8.X版本](http://www.postgresql.org/docs/8.4/static/parser-stage.html)。在9個以上的版本中,PosgreSQL [使用Bison](http://www.postgresql.org/docs/9.0/static/parser-stage.html),即完全兼容yacc的解析器生成器。 – 2013-11-11 11:53:03