小编Spe*_*dge的帖子

ANTLR4 PLSQL 语法 Python 3 缺失函数

我正在为 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 parsing plsql lexer antlr4

3
推荐指数
1
解决办法
680
查看次数

antlr4 python 3 从 plsql 语法打印或转储标记

我在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 …

python tree parsing token antlr4

2
推荐指数
1
解决办法
2246
查看次数

标签 统计

antlr4 ×2

parsing ×2

python ×2

lexer ×1

plsql ×1

token ×1

tree ×1