我正在尝试使用ANTLR为以下语法构建AST
condition_in
: column_identifier ('NOT')? 'IN' (sql_element_list | LPAREN select_stmt RPAREN)
;
对于上面我如何根据输入在NOT IN或IN构建一个root树?还是有更好的方法吗?
对于像dicts这样的python,我如何构建一个以树为根的树,每个键的子MAP_PAIR:值应该很棒我猜
map : '{' collection_element':'collection_element (',' collection_element':'collection_element)* '}'
我尝试了几种带有标签和树重写的替代品,但是一个总是抱怨的
任何帮助将不胜感激
答案 0 :(得分:1)
尝试这样的事情:
grammar T;
options {
output=AST;
}
tokens {
NOT_IN;
MAP_PAIR;
MAP;
}
condition_in
: column_identifier ( 'NOT' 'IN' in_end -> ^(NOT_IN column_identifier in_end)
| 'IN' in_end -> ^('IN' column_identifier in_end)
)
;
in_end
: sql_element_list
| LPAREN select_stmt RPAREN -> select_stmt
;
map
: '{' (entry (',' entry)*)? '}' -> ^(MAP entry*)
entry
: k=collection_element ':' v=collection_element -> ^(MAP_PAIR $k $v)
;
// ...