摘要:我希望为我自己的语言设置左右边距 - 排除语法检查的代码区域。
后台:使用xtext,我正在尝试创建漂亮的Cobol编辑器。到目前为止,我完成了语法并遇到了边距和注释问题。
左边距我可以包含在语法中:在'\ n'之后最多6个!'\ n'字符。
但这并不能解决我的问题。 SLComment以'*'开头,从左边第7个位置开始。我可以用'\ n''*' - >来捕获它'\ n'规则,一旦我以某种方式排除每行中的前6个字符。
我不能把它留作'*' - > '\ n'和委托位置检查验证,因为它搞乱了多重规则,当然使用'*'。在语法边距规则之后放置注释规则也不是一个解决方案,因为这样我就无法在代码的第一行内捕获保证金。
我也知道我不会使用语法规则解决右边距问题(例如排除78位置之后的区域)。
我想有一种方法可以干扰xtext正在检查的文本,但是没有找到解决方案或提示如何实现这一点。
还试图找出是否可以通过预处理以某种方式进行,但也未能找到任何提示如何这样做。
或者也许可以一次使用两个语法。额外的一行会获得每一行并隐藏保证金吗?
希望我能够描述我面临的问题以及到目前为止我尝试过的问题。
答案 0 :(得分:0)
我猜你可以使用LINE_START_COMMENT终端规则来捕获每一行的前6个字符,然后将其隐藏在语法中。
<Grid>
<Canvas x:Name="root" Margin="20 20" RenderTransformOrigin="0,0" >
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="{Binding ElementName=sliderScale, Path=Value}" ScaleY="{Binding ElementName=sliderScale, Path=Value}"/>
</TransformGroup>
</Canvas.RenderTransform>
<Rectangle Fill="Red" Stroke="Black" Width="200" Height="200"/>
<Rectangle Canvas.Top="20" Canvas.Left="20" Stroke="Black" Fill="Green" Width="100" Height="100"/>
</Canvas>
<Slider x:Name="sliderScale" Canvas.Left="35" Canvas.Top="251" Height="25" Width="273" Value="1" Maximum="2" Margin="74,249,170,45"/>
</Grid>
然后,使用这种方法,我猜你也应该修改你的全行注释规则,如:
terminal LINE_START_COMMENT:
// Up to 6 chars that are NOT a new line
'\n' (!'\n')? (!'\n')? (!'\n')? (!'\n')? (!'\n')? (!'\n')?
;
这里我已将FULL_LINE_COMMENT定义为在以下LINE_START_COMMENT之后结束。要检查多个连续的注释行,您必须接受任何不是注释终止符(在本例中为LINE_START_COMMENT)或LINE_START_COMMENT之后的任何注释行,并在其后添加新的“*”。