2016-10-02 3 views
1

間違ったラインで解析エラーを示します私のために良い。この問題は、eclipseでdslを使用しているときに組み込みの構文バリデータで発生します。私はセミコロンを欠場すると、バリデータは間違ったラインに構文エラーがスローされます。私の文法エラーがXTEXT Validatorは、私は現在、次の(shortend)文法で小さなDSLを開発しています

Error marker is shown on the next line

ありますか?ありがとう;)

+1

xtextにはEOLセマンティクスはありません。セミコロンが予想されますが、setキーワードが見つかります。これは、setが間違ってマークされている理由です。ラインベースの構文が本当に必要な場合は、WSをスーパーグラムからWSとNLに分割する必要があります –

答えて

1

あなたの例に基づいて大まかに小さなDSLがあります。基本的には、改行は「隠された」ものとは考えられません(パーサーによって無視されることはなくなりました)。空白だけです。新しい端末MY_WSMY_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) 

これは、結果として生じる動作を示すイメージです。

+0

詳細な回答ありがとうございます。私はLBを隠すことを検討します。 – Chris

関連する問題