xtext - 如何设置代码区域,排除语法检查

时间:2012-09-12 08:34:02

标签: xtext

摘要:我希望为我自己的语言设置左右边距 - 排除语法检查的代码区域。

后台:使用xtext,我正在尝试创建漂亮的Cobol编辑器。到目前为止,我完成了语法并遇到了边距和注释问题。

左边距我可以包含在语法中:在'\ n'之后最多6个!'\ n'字符。

但这并不能解决我的问题。 SLComment以'*'开头,从左边第7个位置开始。我可以用'\ n''*' - >来捕获它'\ n'规则,一旦我以某种方式排除每行中的前6个字符。

我不能把它留作'*' - > '\ n'和委托位置检查验证,因为它搞乱了多重规则,当然使用'*'。在语法边距规则之后放置注释规则也不是一个解决方案,因为这样我就无法在代码的第一行内捕获保证金。

我也知道我不会使用语法规则解决右边距问题(例如排除78位置之后的区域)。

我想有一种方法可以干扰xtext正在检查的文本,但是没有找到解决方案或提示如何实现这一点。

还试图找出是否可以通过预处理以某种方式进行,但也未能找到任何提示如何这样做。

或者也许可以一次使用两个语法。额外的一行会获得每一行并隐藏保证金吗?

希望我能够描述我面临的问题以及到目前为止我尝试过的问题。

1 个答案:

答案 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之后的任何注释行,并在其后添加新的“*”。