Construyendo un shell con Flex y Bison

Empezamos con el shell (clase del 9 de junio de 2009)
La especificación del scanner debe detectar las palaras clave (van ser los tokens de la GLC)
El scan.lex
%{ #include "clases.hc" #include "gran.tab.hc" %} %% <<EOF>> return EoF; [ \t]+ ; logout return LOGOUT pwd return PWD cd return CD; "\n" return '\n' "\\\n" ; ";" return ';' "(" return '(' ")" return ')' "||" return BARBAR "&&" return AMPAMP "|" return '|' ">" return '>' ">>" return '>>' "<" return '<<' [-0-9a-zA-Z_:\./\*~\[\]\{\}]+ return ID; \"[^\n\"]*|(\\\")*\" return CUOT; \'[^\n\']*|(\\\')*\' return CUOT; . {cerr << '[' << yytext << "] erroneo \n";} %% int yymap () { return 1; }
Y luego la gramatica libre de contexto:
%token EoF ID CUOT %token LOGOUT PWD CD %token MAYMAY AMPAMP BARBAR %% orden: sec '\n' | EoF | '\n' ; sec: cond ';' sec | cond ; cond: redir AMPAMP cond | redir BARBAR cond | redir ; redir: pipe '>' id | pipe MAYMAY id | pipe ; pipe: cmdin '|' pipe | cmdin ; cmdin: cmd '<' id | cmd ; cmd: id args | CD id | LOGOUT | '(' sec ')' ; args: args id | ; id: ID | CUOT ; %%
Trackback URL for "Construyendo un shell con Flex y Bison"
http://www.odiolasllaves.com.ar/trackback/103
»
- SebaMinguez's blog
- Inicie sesión o regístrese para enviar comentarios
