我正在用Xtext创建一个DSL,用于生成图像。然而,由于我对Xtext完全不了解,我遇到了一些问题,希望您能给我一些指导。
最终,我希望用户使用以下编码结构:
bgcolor: ffffff
bgsize: 500x500
box1:
bgcolor: 000000
size: 300x300
position: 100x100
box2:
bgcolor: eeeeee
size: 300x300
position: 100x100
我在Xtext中想到了以下内容(我没有对MWE2做任何更改):
Image : (ImageElement+=ImageElementType)*;
ImageElementType: BgColor | BgSize | Box;
// SET BASIC TERMINAL RULES
terminal SIZE : INT 'x' INT;
terminal COLOR : COLOR_BASIC | COLOR_HEX;
terminal COLOR_BASIC : 'green' | 'red' | 'blue' | 'yellow' | 'black' | 'white' | 'orange' | 'purple' | 'pink';
terminal DIGIT : ('0'..'9'|'a'..'f'|'A'..'F');
terminal COLOR_HEX : DIGIT DIGIT DIGIT DIGIT DIGIT DIGIT;
BgColor: name='bgcolor:' value=COLOR;
BgSize: name='bgsize:' value=SIZE;
Box: name='box:';
我需要解决几个问题,但我想知道解决这些问题的最佳方法是什么。
我并不是在寻求一个直接的解决方案(尽管这很好;-),而是一些如何解决这些问题的技巧。所有这些都是通过编辑MWE2工作流解决的吗?我在使用Xtext的文档时遇到了一些困难。
提前感谢您的时间和评论!
亲切的问候
如何设置bgcolor:或bgsize:只能使用一次?
将它们设置为ImageElementType
如何设置box1、box2等是从同一个规则框构造的:?
将属性名称添加到框中
如何设置box1:下指定的属性属于该框?
一种可能是添加一个新的属性
概念,并将它们添加到Box
规则中
我怎样才能强制缩进?
您可以创建一种像Python这样对空格敏感的语言,但更好的办法是为您的语言实现格式化程序,并在保存之前自动格式化模型。
关于终端规则的大小和一般。。。在大多数情况下,最好使用更通用的语法,并在相应的语言验证器或ValueConverter中应用您的限制。
不确定确切的语言规范是什么,但这里有一个可能的起点。保持终端规则不变:
Image:
ImageElement+=ImageElementType*;
ImageElementType:
'bgcolor' ':' bgcolor=COLOR
'bgsize' ':' bgsize=SIZE
boxes+=Box*;
Box:
name=ID ':'
properties+=Property*;
Property:
name = KnownProperties ':' value = PropertyValue
;
PropertyValue:
SIZE | COLOR | DIGIT
;
enum KnownProperties:
bgcolor | size | position;
// SET BASIC TERMINAL RULES
terminal SIZE:
INT 'x' INT;
terminal COLOR:
COLOR_BASIC | COLOR_HEX;
terminal COLOR_BASIC:
'green' | 'red' | 'blue' | 'yellow' | 'black' | 'white' | 'orange' | 'purple' | 'pink';
terminal DIGIT:
('0'..'9' | 'a'..'f' | 'A'..'F');
terminal COLOR_HEX:
DIGIT DIGIT DIGIT DIGIT DIGIT DIGIT;
验证规则的定义通常有两种方式,如果你使用了验证器的话,通常通过rule属性定义验证规则,而如果使用的是独立验证的话,则是通过rule方法进行定义。 属性定义 属性定义方式仅限于验证器,通常类似于下面的方式: <?php namespace app\index\validate; use think\Validate; class User extends Validate { prot
我不明白关键字的区别("-
自定义了一个表单验证类,但是在django中当我clean_UserName这个方法执行了并抛出异常的时候,其他的验证方法还会继续执行,怎么才能在一个验证方法抛出异常后其他的方法都中止执行呢?
我正在尝试验证密码字段是否存在。我想允许某人编辑用户,他们可能想更改用户密码,也可能不想更改用户密码。所以我想我可以使用Laravels验证规则,特别是“有时”规则来实现这一点。我有一套规则: 例如,对于其他字段,通常会有其他规则,而对于密码,则会有更严格的规则。如果传递的数据中存在密码字段,我希望这只应用min:8规则,但是如果我将密码字段留空,则会出现一个验证错误,表明密码字段是必需的。 我不
如何在验证器中添加密码验证规则? 验证规则: 密码包含以下五个类别中至少三个类别的字符: 英文大写字符(A–Z) 英文小写字符(a–z) 以10位数字(0–9)为基数 非字母数字(例如:!、$、#或%) Unicode字符 如何在验证器规则中添加上述规则? 我的代码在这里
我尝试在Xtext中定义浮点类型,但是我在生成ariti事实时收到错误消息: 我的浮动终端如下: 我的浮点是复制一个能够被Java接受的浮点:1.1、1、0.1