2

要約:自分の言語(文法チェックが除外されているコードの領域)に左右のマージンを設定したいと思います。

背景: xtextを使用して、優れたCOBOLエディターを作成しようとしています。これまでのところ、文法を終えて、余白とコメントの問題に遭遇しました。

文法内に含めることができる左マージン:'\ n'の後から6まで!'\n'文字。

しかし、それは私の問題を解決していません。SLCommentは、左から7番目の位置にある「*」から始まります。'\ n''*'->'\ n'ルールを使用すると、各行の最初の6文字をなんらかの方法で除外すると、それをキャッチできます。

'*'->'\ n'のままにして、位置チェックを委任して検証することはできません。これは、もちろん'*'を使用する乗算ルールが台無しになっているためです。文法マージンルールの直後にコメントルールを配置することも解決策ではありません。そうすると、コードの最初の行内でマージンをキャッチできないためです。

また、文法規則を使用して右マージンの問題(たとえば、78の位置の後の領域を除外する)を解決しないことも知っています。

xtextがチェックしているテキストに干渉する方法があると思いますが、解決策を見つけたり、これを達成する方法を示唆したりしていません。

また、これが何らかの方法で前処理によって行われるかどうかを調べようとしましたが、その方法のヒントも見つかりませんでした。

または、2つの文法を同時に使用することも可能です。余分なものは各行を取得し、マージンを非表示にしますか?

私が直面している問題とこれまでに試したことを説明できたと思います。

4

1 に答える 1

0

すべての行の最初の6文字をキャプチャし、文法全体で非表示にするLINE_START_COMMENTターミナルルールのようなものを使用できると思います。

terminal LINE_START_COMMENT: 
    // Up to 6 chars that are NOT a new line
    '\n' (!'\n')? (!'\n')? (!'\n')? (!'\n')? (!'\n')? (!'\n')?
;

次に、このアプローチを使用して、フルラインコメントルールも次のように変更する必要があると思います。

terminal FULL_LINE_COMMENT: 
    LINE_START_COMMENT '*' 
    (LINE_START_COMMENT '*' | !(LINE_START_COMMENT) )+
    (LINE_START_COMMENT)?
;

ここでは、次のLINE_START_COMMENTの後に終了するようにFULL_LINE_COMMENTを定義しました。複数の連続するコメント行をチェックするには、コメントターミネータ(この場合はLINE_START_COMMENT)またはLINE_START_COMMENTの後に新しい「*」が付いていないものをコメントとして受け入れる必要があります。

于 2015-09-23T14:06:57.197 に答える