Parsing 未激活的规则如何影响解析?
在为简单的SQL方言编写XText语法时,我发现,显然不能从start符号派生的规则会影响解析 例如,给出以下(非常简化的)语法摘录,它应该能够解析表1中的Parsing 未激活的规则如何影响解析?,parsing,xtext,Parsing,Xtext,在为简单的SQL方言编写XText语法时,我发现,显然不能从start符号派生的规则会影响解析 例如,给出以下(非常简化的)语法摘录,它应该能够解析表1中的之类的表达式: Start: subquery ';'; subquery: /*select=select_clause */tables=from_clause; from_clause: 'FROM' tables; tables: tables+=table (',' tables+=tabl
之类的表达式代码>:
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+ ')';
当试图解析表1中的字符串时代码>,我得到以下错误:
“输入时没有可行的替代方案”;“”勒索
如果我删除规则和_子句
,则错误消失,字符串被正确解析。即使不能从Start
派生出with\u子句,这怎么可能呢?问题是谓词(=>
)包含歧义
也许你可以把前缀和名字放在一起
Table_name:
name=Qualified_name;
Qualified_name :
(ID '.' (ID '.')?)? ID;
或者你试试类似的东西
Table_name:
((prefix=ID ".")? =>name=Qualified_name);
Qualified_name :
=>(ID '.' ID) | ID;
前者确实解决了我的语法问题。我为此付出了很多。然而,这并不能回答为什么删除不可激活规则可以正确解析输入的问题。你知道为什么会这样吗?我认为这些规则在解析器的某个地方被使用了