【发布时间】:2019-03-11 10:35:38
【问题描述】:
我在Python中使用antlr4,阅读以下语法:
https://github.com/antlr/grammars-v4/tree/master/plsql
文件 grants.sql 只有“开始从双重选择'鲍勃';结束;”
像树一样打印 lisp 的简单代码
from antlr4 import *
from PlSqlLexer import PlSqlLexer
from PlSqlParser import PlSqlParser
from PlSqlParserListener import PlSqlParserListener
input = FileStream('grants.sql')
lexer = PlSqlLexer(input)
stream = CommonTokenStream(lexer)
parser = PlSqlParser(stream)
tree = parser.sql_script()
print ("Tree " + tree.toStringTree(recog=parser));
输出如下:
树 (sql_script (unit_statement (anonymous_block BEGIN (seq_of_statements (statement (sql_statement (data_manipulation_language_statements (select_statement (subquery (subquery_basic_elements (query_block SELECT (selected_element (select_list_elements (expressions (logical_expression (multiset_expression (relational_expression (compound_expression (concatenation (model_expression (unary_expression (atom (constant (quoted_string 'bob'))))))))))))) (from_clause FROM (table_ref_list (table_ref (table_ref_aux (table_ref_aux_internal (dml_table_expression_clause (tableview_name (identifier (id_expression (regular_id DUAL)))))) )))))))))))) ;) END ;)) )
我希望能够拥有列出以上内容的 Python 代码,而不是在类似 lisp 的语句中,而是列出所有规则和标记..即
- .sql_script
- ..unit_statement
- ...anonymous_block
- ....开始
等等等等
谁能提供执行此操作的 python 代码或给我一些提示。感激不尽。
【问题讨论】:
-
我确实看到了,但我不能在那里转置 Java 代码。 (公平地说,我对 Python 也很陌生)
标签: python parsing tree token antlr4