向 Rascal 语法定义添加换行符

问题描述 投票:0回答:1

如何添加换行符作为 Rascal 语法定义的一部分。我试过了,但似乎不起作用。

syntax Entity
   =  @Foldable entity: "entity" Id name  "{"  {Field “\n”}+ fields "}"
;

syntax Field 
   = field: Id name ":" Type t ;
rascal
1个回答
1
投票

通常,您会在范围中添加

layout
定义,如下所示:

layout Whitespace = [\ \n\t\r]* !>> [\ \n\t\r];

添加此规则后,在生成解析器之前,其他规则都会在各处使用

Whitespace
非终结符进行扩充。

例如,在内部

Field+
变为
{Field Whitespace}+
en
Field
变为
Id name Whitespace ":" Whitespace Type t

因此在所有符号之间添加

Whitespace
。为了能够在顶部非终结符之前和之后接受换行符和空格,请添加 start
 到它:

start syntax TranslationUnit = Entity*;


这将自动添加此规则:

syntax start[TranslationUnit] = Whitespace {Entity Whitespace}* Whitespace;


    

© www.soinside.com 2019 - 2024. All rights reserved.