Каковы строки%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
,