0
간단한 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;
, 나는 다음과 같은 오류 얻을 문자열 구문 분석하려고 :
'no viable alternative at input ';'' on EString
하는 경우를 규칙 with_clause
을 제거하면 오류가 사라지고 문자열이 제대로 구문 분석됩니다. with_clause
은 Start
에서 파생되지 않아도 어떻게 가능합니까?
실제로 전을 해결해 뭔가를 시도한다는 것입니다 내 문법에 관한 문제. 그것을 위해 많은 탱크. 그러나이 규칙을 사용하면 입력을 올바르게 구문 분석 할 수없는 이유에 대한 답을 얻을 수 없습니다. 왜 이런 경우인지 알고 있습니까? – Paddre
나는 규칙이 어떻게 든 파서의 어딘가에서 사용된다고 생각한다. –