Beim Schreiben einer XText-Grammatik für einen einfachen SQL-Dialekt fand ich heraus, dass scheinbar Regeln, die nicht aus dem Startsymbol abgeleitet werden können, das Parsen beeinflussen.Wie wirken sich unterschwellige Regeln auf das Parsing aus?
z. der folgende (sehr vereinfacht) Auszug meiner Grammatik gegeben die in der Lage sein sollten Ausdrücke wie FROM table1;
zu analysieren:
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+ ')';
Beim Versuch, zu analysieren, um die Zeichenfolge FROM table1;
, erhalte ich folgende Fehlermeldung:
'no viable alternative at input ';'' on EString
Wenn Ich entferne Regel with_clause
, der Fehler ist weg und die Zeichenfolge wird ordnungsgemäß analysiert. Wie ist das möglich, obwohl with_clause
nicht von Start
abgeleitet werden kann?
ehemalige tatsächlich löst ein Problem mit meiner Grammatik. Tanks viel dafür. Dies beantwortet jedoch nicht die Frage, warum das Entfernen der unterstellbaren Regel ermöglicht, dass die Eingabe korrekt analysiert wird. Hast du eine Idee, warum das so ist? – Paddre
Ich denke, die Regeln werden irgendwie irgendwo im Parser verwendet –