Я пытаюсь разобрать следующий ввод строки с использованием Lex и Yacc без успеха.Проанализировать имя пользователя и строки
«@user, некоторые случайный текст, @another пользователя, другой случайный текст»
Я использую следующую грамматику:
/* Lambda calculus grammar by Zach Carter */
%lex
%%
\s*\n\s* {/* ignore */}
";" { return 'SEP'; }
"@" { return 'AT'; }
[a-zA-Z]+ { return 'VAR'; }
<<EOF>> { return 'EOF'; }
/lex
%%
file
: expr EOF
{ return $expr; }
| EOF
;
expr
: AT expression
| expression
| SEP expression
;
expression
: VAR
{ $$ = yytext; }
;
Вы можете дать этой грамматике попробовать here:
в результате я я хотел бы иметь это:
"@user; некоторый случайный текст; @ другой пользователь; другой случайный текст»
Выход:
пользователя некоторые
случайный текст
другой пользователь
другой случайный текст
«Вы можете дать эту грамматику попробовать здесь». Er ... Нет, потому что 'AT не определен'. – Louis
@Louis Это одна из проблем, которые я получил. Если вы посмотрите на ключевые слова lex, «@» {return AT; } 'хорошо определено – GETah
Зная yacc/lex, bison/flex помогает использовать jison, но jison не является заменой бизону (или yacc, или чему-либо еще). Джисон - это его собственная вещь. Поэтому все, что работает с этими другими инструментами, не будет работать с jison, включая 'return AT'. То, что вызывает недоумение, заключается в том, что вы используете 'return 'VAR'', а не' return VAR', поэтому зачем возвращать AT'? – Louis