允许 xtext 语法中的多行字符串嵌入 javascript 代码

Allow multiline String in xtext grammar to embed javascript code

我正在编写一个小 "language" 来创建 javascript 代码。本质上它是 hiding/showing 一些 html 表单元素。但我需要为某些代码添加自定义 javascript 代码,例如在点击事件上做什么。

Action:
  'on' eventName=ID 'do' code=CODE
;

terminal BEGIN: "!$";
terminal END: "$!";

terminal CODE:
  BEGIN -> END
;

我现在可以用我的语言创建 Eclipse 插件和代码,但字段代码的值包含 BEGIN 和 END 字符。

on eventName do !$
    var x = thisIsJavaScript();
    console.log(x); 
$!

我的价值是:

!$
var x = thisIsJavaScript();
console.log(x);             
$!

我只想要中间没有 !$ 和 $! 的部分。

如有任何提示,我们将不胜感激。

非常感谢!

你应该为你的终端规则写一个值转换器

import org.eclipse.xtext.common.services.DefaultTerminalConverters;
import org.eclipse.xtext.conversion.IValueConverter;
import org.eclipse.xtext.conversion.ValueConverter;
import org.eclipse.xtext.conversion.ValueConverterException;
import org.eclipse.xtext.nodemodel.INode;

import com.google.inject.Inject;

public class MyDslConverters extends DefaultTerminalConverters {

    @Inject
    private CODEValueConverter codeValueConverter;

    @ValueConverter(rule = "CODE")
    public IValueConverter<String> CODE() {
        return codeValueConverter;
    }

    public static class CODEValueConverter implements IValueConverter<String> {

        @Override
        public String toValue(String string, INode node) throws ValueConverterException {
            return string.substring(2, string.length()-2);
        }

        @Override
        public String toString(String value) throws ValueConverterException {
            return "!$" + value + "$!";
        }

    }

}