S-JIS[2013-09-01] 変更履歴

Xtextパーサー

Xtext用のパーサーのメモ。

 

概要

Xtextのソースをビルドすると、自分のDSLを解釈するためのパーサークラスが生成される。
このパーサークラスを自分で呼び出して文字列を解釈させたり、一部分のルールだけを解釈させたりすることが出来る。


文字列のパース

DMDLの文字列をパースする例。

import java.io.StringReader;

import com.google.inject.Injector;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.parser.IParseResult;

import jp.hishidama.xtext.dmdl_editor.parser.antlr.DMDLParser;
import jp.hishidama.xtext.dmdl_editor.ui.internal.DMDLActivator;
	Injector injector = DMDLActivator.getInstance().getInjector(DMDLActivator.JP_HISHIDAMA_XTEXT_DMDL_EDITOR_DMDL);
	DMDLParser parser = injector.getInstance(DMDLParser.class);

//	IParseResult result = parser.doParse("dummy={ d:INT; };");
	IParseResult result = parser.parse(new StringReader("dummy={ d:INT; };"));
	if (result.hasSyntaxErrors())) {
		for (INode error : result.getSyntaxErrors()) {
			〜
		}
	} else {
		EObject obj = result.getRootASTElement();
		〜
	}

一部のルールのパース

DMDLの属性一覧をパースする例。

import java.io.StringReader;

import com.google.inject.Injector;
import org.eclipse.xtext.ParserRule;
import org.eclipse.xtext.nodemodel.INode;
import org.eclipse.xtext.parser.IParseResult;

import jp.hishidama.xtext.dmdl_editor.parser.antlr.DMDLParser;
import jp.hishidama.xtext.dmdl_editor.services.DMDLGrammarAccess;
import jp.hishidama.xtext.dmdl_editor.ui.internal.DMDLActivator;
	Injector injector = DMDLActivator.getInstance().getInjector(DMDLActivator.JP_HISHIDAMA_XTEXT_DMDL_EDITOR_DMDL);
	DMDLParser parser = injector.getInstance(DMDLParser.class);

	DMDLGrammarAccess grammar = parser.getGrammarAccess();
	ParserRule rule = grammar.getAttributeListRule();	//DMDLの属性一覧のルール
	IParseResult result = parser.parse(rule, new StringReader("@test1 @test2(aaa=123)"));
	if (result.hasSyntaxErrors())) {
		for (INode error : result.getSyntaxErrors()) {
			〜
		}
	} else {
		EObject obj = result.getRootASTElement();
		〜
	}

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