Eclipse Xtext-自定义的不带引号的终端字符串

Eclipse Xtext-自定义的不带引号的终端字符串,eclipse,xtext,Eclipse,Xtext,我是Xtext的新手,遇到了一个问题 当我尝试创建一个没有引号的终端字符串时,我总是得到EOF错误 如果我在没有引号的情况下注释掉字符串的代码,我不会得到错误,一切正常 有人能给我解释一下吗? 或者给我一些提示如何更好地解决这个问题 多谢各位 // String without quotes terminal STRINGWQ: ( ('a'..'z'|'A'..'Z')('a'..'z' | 'A'..'Z' | '_'| '-' | '§' | '?' | '!'| '@'

我是Xtext的新手,遇到了一个问题

当我尝试创建一个没有引号的终端字符串时,我总是得到EOF错误

如果我在没有引号的情况下注释掉字符串的代码,我不会得到错误,一切正常

有人能给我解释一下吗? 或者给我一些提示如何更好地解决这个问题

多谢各位

    // String without quotes
terminal STRINGWQ: ( ('a'..'z'|'A'..'Z')('a'..'z' | 'A'..'Z' | '_'| '-' | '§' | '?' | '!'| '@'
                                        | '\n' | ':' |'%' | '.' | '*' | '^' | ',' | '&' | '('|')'| '0'..'9'|' ')*);
代码的其余部分

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"


Model:
    (elements += GITest)* 
;


GITest:
    KWHeader | KWTestCase
;

// KeyWords Header
KWHeader:
    'Test' '!''?'
    ;

KWTestCase:
    'testcase' int=INT ':' title = ID |
    'Hello' names=ID '!'
;
更新: 数据类型规则

 QSTRING returns ecore::EString: //custom terminal SurveyString
        (('a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|
           'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'|' ')
          ('a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|
           'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'|
           ' '|'_'|'-'|'§'|'?'|'!'|'@'|'%'|'.'|'*'|'^'|','|'&'|'('|')'|'0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9')*);
更新2:

让它与数据类型规则ID一起工作

代码:

STRINGWQ:(('')ID)((ID)?(INT)?''(ID);
终端ID:“^”?(“a”…“z”|“a”…“z”|“a”)(“a”…“z”|“a”…“z”|“a”…“z”|“0”…“9”|“/”|“|”|“|”|“|”!“|”§“|“|”$”|“%”和|

'('|')“|”=“|”?“|”\\'\'\\'\'\'.*“|”+“|”.-“|”>“|”您的STRINGWQ会隐藏终端规则ID和基本上包括关键字在内的所有其他规则。很可能整个文档将作为STRINGWQ类型的单个终端标记使用。您应该尝试将字符串建模为数据类型规则。

您的STRINGWQ会隐藏终端规则ID和关键字基本上包括关键字在内的所有其他规则。很可能整个文档将作为STRINGWQ类型的单个终端标记使用。您应该尝试将字符串建模为数据类型规则。

这对我很有用:

Property:
    id=ID | int=INT | prop=PROPERTY_VALUE | spec=SPECIAL;

PROPERTY_VALUE:
    (':');

SPECIAL:
    (' ' | '/' | ';' | ',' | '!' | '§' | '%' | '&' | '(' | ')' | '?' | '*' | '+' | '.' | '-' | '|' | '[' | ']')
我分隔了冒号,因为我需要以另一种方式使用属性值。 但您也可以将其添加到“特殊”中。

这对我很有用:

Property:
    id=ID | int=INT | prop=PROPERTY_VALUE | spec=SPECIAL;

PROPERTY_VALUE:
    (':');

SPECIAL:
    (' ' | '/' | ';' | ',' | '!' | '§' | '%' | '&' | '(' | ')' | '?' | '*' | '+' | '.' | '-' | '|' | '[' | ']')
我分隔了冒号,因为我需要以另一种方式使用属性值。
但您也可以将其添加到“特殊”中。

您是在写入任何内容之前还是在开始键入内容之后出现EOF错误?我开始键入内容,然后eclipse显示错误您是在写入任何内容之前还是在开始键入内容之后出现EOF错误?我开始键入内容,然后eclipse显示错误I tried但它不起作用。我在上面添加了数据类型规则。使用此规则,我在每个INT上获得此错误“输入不匹配”“需要规则_INT”和字符串“外部输入'Text'需要EOF”。谢谢。我尝试了它,但它不起作用。我在上面添加了数据类型规则。使用此规则,我在每个INT上获得此错误“输入不匹配”“需要规则_INT”和字符串上的“外部输入'Text'需要EOF”谢谢