間違ったラインで解析エラーを示します私のために良い。この問題は、eclipseでdslを使用しているときに組み込みの構文バリデータで発生します。私はセミコロンを欠場すると、バリデータは間違ったラインに構文エラーがスローされます。私の文法エラーがXTEXT Validatorは、私は現在、次の(shortend)文法で小さなDSLを開発しています
ありますか?ありがとう;)
間違ったラインで解析エラーを示します私のために良い。この問題は、eclipseでdslを使用しているときに組み込みの構文バリデータで発生します。私はセミコロンを欠場すると、バリデータは間違ったラインに構文エラーがスローされます。私の文法エラーがXTEXT Validatorは、私は現在、次の(shortend)文法で小さなDSLを開発しています
ありますか?ありがとう;)
あなたの例に基づいて大まかに小さなDSLがあります。基本的には、改行は「隠された」ものとは考えられません(パーサーによって無視されることはなくなりました)。空白だけです。新しい端末MY_WS
とMY_NL
と、文法ヘッダーのhidden
文が変更されていることに注意してください(関連箇所にコメントを追加しました)。このアプローチは、あなたにいくつかの一般的なアイデアを与え、あなたが望むものを達成するためにそれを試すことができます。改行が隠されなくなった場合は、文法規則で改行を考慮する必要があります。
grammar org.xtext.example.mydsl.MyDsl
with org.eclipse.xtext.common.Terminals
hidden(MY_WS, SL_COMMENT) // ---> hide whitespaces and comments only, not linebreaks!
generate mydsl "uri::mydsl"
CommandSet:
(commands+=Command)*
;
CommandName:
name=ID
;
ArgumentList:
arguments += STRING (',' STRING)*
;
Command:
(commandName=CommandName LBRACKET (args=ArgumentList)? RBRACKET EOL);
terminal LBRACKET:
'('
;
terminal RBRACKET:
')'
;
terminal EOL:
';' MY_NL? // ---> now an optional linebreak at the end!
;
terminal MY_WS: (' '|'\t')+; // ---> whitespace characters (formerly part of WS)
terminal MY_NL: ('\r'|'\n')+; // ---> linebreak characters (no longer hidden)
これは、結果として生じる動作を示すイメージです。
詳細な回答ありがとうございます。私はLBを隠すことを検討します。 – Chris
xtextにはEOLセマンティクスはありません。セミコロンが予想されますが、setキーワードが見つかります。これは、setが間違ってマークされている理由です。ラインベースの構文が本当に必要な場合は、WSをスーパーグラムからWSとNLに分割する必要があります –