Я пытаюсь создать определение языка для редактора Monaco .Язык очень самоуверенный, и я не контролирую компилятор и т. Д.
Экранирующий символ "\" универсален;однострочные комментарии могут быть продолжены до следующей строки, заканчиваясь на "\"
Некоторые примеры с использованием комментариев в стиле C ++:
// This comment \
continues on the following line
// This one does NOT continue \\
because the escape char was itself escaped
// This one DOES continue because \\\
the 1st '\' escapes the 2nd; the 3rd escapes EOL
// This comment continues to the following line \
But the line was empty. This should not be commented.
Я реализовал всю семантику, кромеПоследняя часть, потому что не представляется возможным сопоставить на пустой строке.Наиболее близким я нашел в документации «@eos», но я не могу понять, как его использовать.Вот моя текущая реализация:
comments: [
[/\/\/$/, 'comment'], // empty single-line comment
[/\/\//, 'comment', '@comment_cpp'],
],
comment_cpp: [
[/(?:[^\\]|(?:\\.))+$/, 'comment', '@pop'],
[/.+$/, 'comment'],
],
Есть ли правило, которое я могу добавить, которое позволит мне "@pop" из правила "@comment_cpp" в пустой строке, так что следующее верно?
// This comment continues to the following line \
and this one continues to the following empty line \
But this line is not commented