【发布时间】:2018-04-27 17:30:27
【问题描述】:
在为简单的 SQL 方言编写 XText 语法时,我发现,显然不能从开始符号派生的规则会影响解析。
例如鉴于我的语法的以下(非常简化的)摘录应该能够解析像FROM table1;这样的表达式:
Start:
subquery ';';
subquery:
/*select=select_clause */tables=from_clause;
from_clause:
'FROM' tables;
tables:
tables+=table (',' tables+=table)*;
table:
name=table_name (alias=alias)?;
table_name:
prefix=qualified_name_prefix? name=qualified_name;
qualified_name_prefix:
ID'.';
qualified_name :
=>qualified_name_prefix? ID;
alias returns EString:
'AS'? alias=ID;
with_clause :
'WITH' elements+=with_list_element (',' elements+=with_list_element)*;
with_list_element :
name=ID (column_list_clause=column_list_clause)? 'AS' '(' subquery=subquery ')';
column_list_clause :
'(' names+=ID+ ')';
尝试解析字符串FROM table1;时,出现以下错误:
'在 EString 上的输入 ';'' 处没有可行的替代方案
如果我删除规则with_clause,错误就会消失并且字符串会被正确解析。即使with_clause 不能从Start 派生,这怎么可能?
【问题讨论】: