Каковы строки%lex и /lex в jison?

Ниже приведен фрагмент кода: http://zaach.github.io/jison/demos/calc/, а также страница документации jison. После прочтения документации jison, lex и flex - я все еще не до конца понимаю синтаксис%lex и / lex. Это специфично для генератора сканера jison? Это означает, что это единственная функция, обеспечивающая вывод json, показанный позже в документации? Я спрашиваю только об этом, потому что документация jison явно не объясняет его назначение, а правила flex / lex, по-видимому, не допускают такой синтаксис.

/* description: Parses end executes mathematical expressions. */

/* lexical grammar */
%lex

%%
\s+                   /* skip whitespace */
[0-9]+("."[0-9]+)?\b  return 'NUMBER';
"*"                   return '*';
"/"                   return '/';
"-"                   return '-';
"+"                   return '+';
"^"                   return '^';
"("                   return '(';
")"                   return ')';
"PI"                  return 'PI';
"E"                   return 'E';
<<EOF>>               return 'EOF';

/lex

1 ответ

Решение

%lex а также /lex маркеры ограничивают только раздел грамматики, относящийся к генератору сканера. %lex маркер отмечает начало и /lex знаменует конец

Когда используешь bison а также flex вы бы поместили определения лексера ("генератор сканера" на языке Jison) в .l файл и грамматика в .y файл. Я не думаю, что существует способ использования bison а также flex (или же yacc/lex) объединить два файла. (Прошло очень много времени с тех пор, как я использовал bison а также flex так что не исключено, что есть что-то, чего я не знаю.)

Дело в том, что хотя Jison черпает вдохновение из bison а также flexЭто действительно независимый инструмент. Так что он включает в себя функции, которые не имеют аналогов в bison или же flex,

Другие вопросы по тегам