如何添加换行符作为 Rascal 语法定义的一部分。我试过了,但似乎不起作用。
syntax Entity
= @Foldable entity: "entity" Id name "{" {Field “\n”}+ fields "}"
;
syntax Field
= field: Id name ":" Type t ;
通常,您会在范围中添加
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;