使用 Rascal 解析以注释开头的文件

Parsing files that start with comment using Rascal

我正在尝试解析以下 ES6 文件:

// comment1

function sum(x, y) {
return x + y;
}

// comment2

var value = 22;

解析不适用于以注释、空格、换行符开头的文件。它适用于代码所有部分的注释。我得到的错误是:

[parsing file:] /test/function.js... found an error at line 3, column 0

语法的起始行是:

start syntax CompilationUnit = Statement* statements LAYOUT?;

我的 LAYOUT 定义如下:

lexical LAYOUT
= Whitespace
| Comment
;

layout LAYOUTLIST
= LAYOUT*
!>> [\t\ \n]
!>> "/*"
!>> "//" ;

我尝试将 LAYOUT?LAYOUT* 添加到开始语法语句的开头,但我得到:

[parsing file:] /test/function.js|std:///ParseTree.rsc|(13348,964,<407,0>,<442,87>): Ambiguity(|unknown:///|(0,84,<1,0>,<10,0>),"CompilationUnit","//comment 1\n\nfunction sum(x, y) {\n    return x + y;\n}\n\n//akakakakak\n\nvar caio = 22;\n")
    at *** somewhere ***(|std:///ParseTree.rsc|(13348,964,<407,0>,<442,87>))
    at parse(|std:///ParseTree.rsc|(14305,5,<442,80>,<442,85>))
    at $root$(|prompt:///|(0,45,<1,0>,<1,45>))

有什么建议吗? 谢谢

有一条自动为您生成的隐式规则:

start[CompilationUnit] = LAYOUTLIST CompilationUnit top LAYOUTLIST;

根据此信息,您可以推断出您需要致电:

parse(#start[CompilationUnit], myFile)

您将得到一棵树,其中包含开始非终结符前后的空格和注释。 'top' 字段可用于投影空白

之间的内容