2015-12-11 6 views
0

Я пишу компилятор языка clike в JS, используя Jison в качестве генератора лексера/синтаксического анализатора с угловым интерфейсом. Я почти получил результат, которого ожидал, но есть одна вещь, которая меня озадачивает - как заставить Jison игнорировать комментарии (и /* block */ и // line)?Обработка комментариев clike в Jison

Есть ли простой способ достичь этого? Помните, что комментарий может быть вставлен в середине любого выражения/выражения?

ответ

2

Вы игнорируете комментарии так же, как игнорируете пробелы: с помощью правила lexer, у которого нет действий.

Например:

\s+         /* IGNORE */ 
"//".*        /* IGNORE */ 
[/][*][^*]*[*]+([^/*][^*]*[*]+)*[/] /* IGNORE */ 

Первая строка игнорирует пробелы. Второй игнорирует однострочные комментарии. И третий игнорирует комментарии блока.

+0

Это идея! Хотя комментарий блока не работал для меня (im, используя формат файла .jison), он дал мне ключ, и я нашел следующее regexp, которое выполняет задание: ''/* "((\ * + [^/*]) | ([^ *])) * \ ** "* /" ' – Vees

+0

@Vees: Да, была опечатка (звезда после закрытия закрывающей скобки отсутствовала). Исправлена. Благодарю. – rici