/* Companion source code for "flex & bison", published by O'Reilly * Media, ISBN 978-0-596-15597-1 * Copyright (c) 2009, Taughannock Networks. All rights reserved. * See the README file for license conditions and contact info. * $Header: /home/johnl/flnb/code/RCS/fb3-2.l,v 2.1 2009/11/08 02:53:18 johnl Exp $ */ /* recognize tokens for the calculator */ %option noyywrap nodefault yylineno %{ # include "fb3-3.h" # include "fb3-3.tab.h" %} /* float exponent */ EXP ([Ee][-+]?[0-9]+) %% /* single character ops */ "+" | "-" | "*" | "/" | "=" | "|" | "," | ";" | "(" | ")" | "{" | "}" { return yytext[0]; } /* comparison ops */ ">" { yylval.fn = 1; return CMP; } "<" { yylval.fn = 2; return CMP; } "<>" { yylval.fn = 3; return CMP; } "==" { yylval.fn = 4; return CMP; } ">=" { yylval.fn = 5; return CMP; } "<=" { yylval.fn = 6; return CMP; } /* keywords */ "if" { return IF; } "then" { return THEN; } "else" { return ELSE; } "while" { return WHILE; } "do" { return DO; } "let" { return LET;} /* built in functions */ "sqrt" { yylval.fn = B_sqrt; return FUNC; } "exp" { yylval.fn = B_exp; return FUNC; } "log" { yylval.fn = B_log; return FUNC; } "print" { yylval.fn = B_print; return FUNC; } /* debug hack */ "debug"[0-9]+ { debug = atoi(&yytext[5]); printf("debug set to %d\n", debug); } /* names */ [a-zA-Z][a-zA-Z0-9]* { yylval.s = lookup(yytext); return NAME; } [0-9]+"."[0-9]*{EXP}? | "."?[0-9]+{EXP}? { yylval.d = atof(yytext); return NUMBER; } "//".* [ \t] /* ignore white space */ \\\n printf("c> "); /* ignore line continuation */ "\n" { return EOL; } . { yyerror("Mystery character %c\n", *yytext); } %%