Разбор файлов, которые начинаются с комментариев, используя Rascal - PullRequest
0 голосов
/ 16 октября 2018

У меня есть следующий файл 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* в начало синтаксической инструкции start, но я получил:

[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>))

Есть предложения?Спасибо

1 Ответ

0 голосов
/ 16 октября 2018

Для вас сгенерировано автоматическое неявное правило:

start[CompilationUnit] = LAYOUTLIST CompilationUnit top LAYOUTLIST;

С этой информацией вы можете сделать вывод, что вам нужно позвонить:

parse(#start[CompilationUnit], myFile)

Вы получите дерево, которое включает в себяпробел и комментарии до и после нетерминала запуска.Поле 'top' может использоваться для проецирования материала между пробелами

...