S-JIS[2013-08-28] 変更履歴

Xtextコメント・空白文字

Xtextのコメントと空白文字のメモ。

 

概要

Xtextでは、コメントや空白文字のルール名はデフォルトで以下の様になっている。

ルール名 内容
WS 空白文字(white space)
ML_COMMENT ブロックコメント(multi-line comment)
SL_COMMENT 単一行コメント(single-line comment)

空白文字やコメントの事を、Xtextでは「hidden」と呼んでいるようだ。

トークンが空白文字やコメントかどうかを判定するのはIHiddenTokenHelper(デフォルトの実装はDefaultHiddenTokenHelper)で行われる。


DefaultHiddenTokenHelper

DefaultHiddenTokenHelperのソースの抜粋。
ルール名があちこちで使われているのが分かる。

package org.eclipse.xtext.parsetree.reconstr.impl;
public class DefaultHiddenTokenHelper extends AbstractHiddenTokenHelper {
〜
	public boolean isWhitespace(AbstractRule rule) {
		return rule != null && "WS".equals(rule.getName());
	}
	public boolean isComment(AbstractRule rule) {
		return rule != null && ("ML_COMMENT".equals(rule.getName()) || "SL_COMMENT".equals(rule.getName()));
	}
〜
}

コメントの判定方法

IHiddenTokenHelperを使ってコメントかどうかを判定することが出来る。

import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.GrammarUtil;
import org.eclipse.xtext.parsetree.reconstr.IHiddenTokenHelper;
import org.eclipse.xtext.parsetree.reconstr.impl.DefaultHiddenTokenHelper;
	public static boolean isComment(EObject object) {
		IHiddenTokenHelper hiddenHelper = new DefaultHiddenTokenHelper(); //本来はインジェクションで初期化すべき

		AbstractRule rule = GrammarUtil.containingRule(object);
		if (rule != null) {
			return hiddenHelper.isComment(rule);
		}
		return false;
	}

Xtext目次へ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま