我正在为 Antlr4使用这个语法https://github.com/antlr/grammars-v4/tree/master/plsql但我收到一个错误,因为它指的是一个不存在的函数。
'NameError: 名称 'IsNewlineAtPos' 未定义 '
我可以看到有人更新了 csharp 版本的两个文件(那些是额外的项目?基本词法分析器和解析器?其中包括引用以下代码中的函数的更新。
// https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve034.htm#SQPUG054
REMARK_COMMENT: 'REM' {IsNewlineAtPos(-4)}? 'ARK'? (' ' ~('\r' | '\n')*)? NEWLINE_EOF -> channel(HIDDEN);
// https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve032.htm#SQPUG052
PROMPT_MESSAGE: 'PRO' {IsNewlineAtPos(-4)}? 'MPT'? (' ' ~('\r' | '\n')*)? NEWLINE_EOF;
// TODO: should starts with newline
START_CMD
//: 'STA' 'RT'? SPACE ~('\r' | '\n')* NEWLINE_EOF
// https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12002.htm
// https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12003.htm
: '@' {IsNewlineAtPos(-2)}? '@'? ~('\r' | '\n')* NEWLINE_EOF
;
Run Code Online (Sandbox Code Playgroud)
这是 git 的更新
https://github.com/antlr/grammars-v4/commit/94887a3f4c9040578ef01b561e1d5e0ec54cbe9b
我正在使用 Python 来运行它,如果有人能告诉我他们为什么“扩展”以及他们创建的这个函数的作用,我将不胜感激。(如果他们能告诉我如何转换为 python 3,那就太棒了)
我在Python中使用antlr4来读取以下语法:
https://github.com/antlr/grammars-v4/tree/master/plsql
文件 grants.sql 只有“begin select 'bob' from Dual; end;”
打印像树一样的 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));
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
Tree (sql_script (unit_statement (anonymous_block BEGIN) (seq_of_statements (语句) (sql_statement (data_manipulation_language_statements (select_statement)) (子查询 (subquery_basic_elements (query_block SELECT (selected_element (select_list_elements (selected_element (select_list_elements (atom)常量 (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 …