Minishell / msh.2022b / scanner.l
scanner.l
Raw
%{
/*-
 * scanner.l
 * Minishell "lex" source
 * Describes valid input lexic.
 *
 * Copyright (c) 1993-2002-2019, Francisco Rosales <frosal@fi.upm.es>
 * Todos los derechos reservados.
 *
 * Publicado bajo Licencia de Proyecto Educativo Práctico
 * <http://laurel.datsi.fi.upm.es/~ssoo/LICENCIA/LPEP>
 *
 * Queda prohibida la difusión total o parcial por cualquier
 * medio del material entregado al alumno para la realización 
 * de este proyecto o de cualquier material derivado de este, 
 * incluyendo la solución particular que desarrolle el alumno.
 *
 * DO NOT MODIFY THIS FILE
 */

#include <unistd.h>     /* isatty, write */
#include <string.h>     /* strdup */

#include "y.tab.h"

static void echo(void)
{
	static int done = 0;
	static int user = 0;

	if (!done) {
		user = isatty(0);
		done = 1;
	}
	if (!user)
		write(2,yytext,yyleng);
}

#define YY_NO_UNPUT

#undef YY_INPUT
#define YY_INPUT(buf,result,max_size) { \
	int c = getchar(); \
	result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
}
%}

%option nounput
%option noinput

%%
[ \t]+		{ echo(); }
[|<>&\n]	{ echo(); return *yytext; }
[^ \t|<>&\n]+	{ echo(); yylval.txt = strdup(yytext); return TXT; }
%%