从终端创建myDSL语法
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
起点,包含行列表
Model:
lines+=LINE*;
每一行都可以选择以LABEL开始,然后以关键字开始
LINE:
LABEL? outTest=DIRECTIVES;
//Line may start with only label with comma separated strings
LABEL:
inputs+=MYSTRING (',' inputs+=MYSTRING )*;
//Different supported keyword directives
DIRECTIVES :
WITHOUT_OPERANDS | WITH_MYSTRING| WITH_ONLY_MYSTRING;
//Directive for END tag
WITHOUT_OPERANDS:
tag=('END') (',')? (inputs+=MYSTRING)*;
//Directive for BEGIN tag
WITH_MYSTRING:
tag=('BEGIN') (inputs+=MYSTRING)* (',' inputs+=MYSTRING)*;
// Directive for PRINT tag
WITH_ONLY_MYSTRING:
tag=('PRINT') inputs+=MYSTRING*;
//Each string may or maynot contain quotes with empty string
MYSTRING hidden(WS):
(UNQUOTED|QUOTED)+;
//Terminal String for match quoted string including empty one
terminal QUOTED:
"'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
;
//Terminal string matching all other
terminal UNQUOTED:
('A'..'Z'|'a'..'z'|'_' |'0'..'9'|'-'|'#'|'='|'?'|'!'| '$'|'@'|"/"| '(' | ')'|'+'|'<'|'>'|'.'|"'"|"\\"|'"'|'*')*
;
这个语法适用于单引号中有空格的字符串。但是它有很多错误/警告
警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:309:3:决策可以使用多个选项匹配输入,例如“RULE_UNQUOTED”:1、2因此,该输入警告(200)禁用了选项2/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:309:3:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:361:3:决策可以使用多个选项匹配输入,例如“RULE_UNQUOTED”:1、2因此,选项2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:361:3:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:438:3:决策可以使用多个选项匹配输入,例如“RULE_UNQUOTED”:1、2因此,选项2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:438:3:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:479:2:决策可以使用多个选项匹配输入,例如“RULE_QUOTED”:2,3因此,选项3被禁用,用于该输入警告(200):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:479:2:决策可以使用多个备选方案匹配输入,例如“RULE_UNQUOTED”:1、3。因此,备选方案3因输入错误而被禁用(208):/组织。xtext。实例mydsl/src gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl。g:491:1:以下令牌定义永远无法匹配,因为之前的令牌与相同的输入匹配:RULE_INT warning(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:257:33:决策可以使用多个备选方案来匹配输入,例如“RULE_UNQUOTED”:1、2。因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:257:33:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:549:45:决策可以使用多个选项匹配输入,例如“RULE_UNQUOTED”:1、2因此,选项2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:549:45:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:604:42:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:604:42:决策可以使用多个选项匹配输入,例如“RULE_UNQUOTED”:1、2因此,该输入警告(200)禁用了选项2/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:738:47:决策可以使用多个备选方案匹配输入,例如“RULE_QUOTED”:1、2因此,备选方案2被禁用,用于该输入警告(200):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:738:47:决策可以使用多个备选方案匹配输入,例如“RULE_UNQUOTED”:1、2因此,备选方案2因该输入错误而被禁用(208):/组织。xtext。实例mydsl。ide/src gen/org/xtext/example/mydsl/ide/contentassist/antlr/internal/InternalMyDsl。g:930:1:以下标记定义永远无法匹配,因为之前的标记匹配相同的输入:RULE_INT 8287[main]INFO text。xtext。发电机XtextGenerator-生成公共基础结构
我已经试过你更新的语法,但仍然不起作用。
输入文本:BEGIN ABC'123457
出现错误:角色“”处没有可行的替代方案
输入文本:打印ABC“”ABC
获取错误:外部输入'\r\n'需要EOF
输入文本:
开始ABC=12,def=34,ghij 123456
xyx=123,abc=345 000001
错误:输入\r\n\r\n时没有可行的替代方案
所有的警告都消失了,除了
错误(208):以下令牌定义永远无法匹配,因为先前的令牌匹配相同的输入:RULE_INT
错误(208):以下令牌定义永远无法匹配,因为先前的令牌匹配相同的输入:RULE_INT
您是否考虑使用两个终端规则和一个数据类型规则?
//Terminal string
STRING_OPERANDS hidden():
(UNQUOTED|QUOTED)+
;
//maybe needs adoption
terminal QUOTED:
"'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
;
terminal UNQUOTED:
('a'..'z' | 'A'..'Z' | '_' | '0'..'9' | '-' | '*' | "/" | "\\" | '(' | ')' | '$' | '=')*
;
或更新
grammar org.xtext.example.mydsl2.MyDsl hidden(WS, ML_COMMENT, SL_COMMENT)
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate myDsl "http://www.xtext.org/example/mydsl2/MyDsl"
Model:
NL? lines+=LINE (NL lines+=LINE)* NL?;
LINE:
label=LABEL? outTest=DIRECTIVES;
//Line may start with only label with comma separated strings
LABEL:
inputs+=MYSTRING (',' inputs+=MYSTRING )*;
//Different supported keyword directives
DIRECTIVES :
WITHOUT_OPERANDS | WITH_MYSTRING| WITH_ONLY_MYSTRING;
//Directive for END tag
WITHOUT_OPERANDS:
tag=('END') (',')? (inputs+=MYSTRING)*;
//Directive for BEGIN tag
WITH_MYSTRING:
tag=('BEGIN') (inputs+=MYSTRING)* (',' inputs+=MYSTRING)*;
// Directive for PRINT tag
WITH_ONLY_MYSTRING:
tag=('PRINT') inputs+=MYSTRING*;
//Each string may or maynot contain quotes with empty string
MYSTRING hidden(WS):
->(UNQUOTED|QUOTED)+;
//Terminal String for match quoted string including empty one
terminal QUOTED:
"'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
;
//Terminal string matching all other
//Terminal string matching all other
terminal UNQUOTED:
('a'..'z' | 'A'..'Z' | '_' | '0'..'9' | '-' | '*' | "/" | "\\" | '(' | ')' | '$' | '=')*
;
terminal ML_COMMENT : '/*' -> '*/';
terminal SL_COMMENT : '//' !('\n'|'\r')* ('\r'? '\n')?;
terminal WS : (' '|'\t')+;
terminal NL : ('\r'|'\n')+;
terminal ANY_OTHER: .;
我得到了错误:
我在javascript中使用Reactjs和通过AJAX使用API。我们如何解决这个问题?以前我使用CORS工具,但现在我需要启用CORS。
问题内容: 如何使用T-SQL更改表中的一个属性以允许为null(不为null-> null)?也许更改表? 问题答案:
问题内容: 希望能帮助您理解“ Java并发实践”中的以下内容: 从构造函数中调用可重写的实例方法(既不是私有方法也不是final方法)也可以使this引用转义。 这里的“转义”是否仅表示在实例完全构建之前,我们可能正在调用实例方法? 我看不到“ this”以任何其他方式逃避了实例的范围。 ‘最终’如何防止这种情况的发生?我缺少实例创建中的’最终’某些方面吗? 问题答案: 这意味着在类之外调用代码
我想允许Joi在表单的标题字段中允许空格/空白。 明天和裘德一起工作。 也应该被允许 晨间漫步 此时,只有最后一个验证为真。以下是我的joi验证: 我添加了正则表达式,但没有结果。 什么是正确的方式?
问题内容: 大家好,所以我试图允许一些文本输入在发送之前经过正则表达式检查。我希望文本仅包含AZ,0-9和空格“”字符。现在是我的代码: 但是,当我输入“这是一个测试”之类的内容时,这仍然会给出结果 有任何想法吗?谢谢大家 问题答案: 您不在正则表达式中包含空格。请尝试以下操作: