/* SI 413 Fall 2011 * Lab 6 * spl-pt1.lpp * This is a scanner specification for the SPL programming language. * The semantic values are all one-node ParseTree objects. */ %{ #include <iostream> using namespace std; #include "parsetree.hpp" #include "spl1.tab.hpp" %} %option noyywrap %% [0-9]+ {yylval = new ParseTree(yytext); return NUM;} true|false {yylval = new ParseTree(yytext); return BOOL;} [+-] {yylval = new ParseTree(yytext); return OPA;} [*/] {yylval = new ParseTree(yytext); return OPM;} and|or {yylval = new ParseTree(yytext); return BOP;} "!" {yylval = new ParseTree(yytext); return NOT;} ":=" {yylval = new ParseTree(yytext); return ASN;} "(" {yylval = new ParseTree(yytext); return LP;} ")" {yylval = new ParseTree(yytext); return RP;} "{" {yylval = new ParseTree(yytext); return LC;} "}" {yylval = new ParseTree(yytext); return RC;} ";" {yylval = new ParseTree(yytext); return STOP;} [><=]|([><!]=) {yylval = new ParseTree(yytext); return COMP;} if {yylval = new ParseTree(yytext); return IF;} else {yylval = new ParseTree(yytext); return ELSE;} while {yylval = new ParseTree(yytext); return WHILE;} read {yylval = new ParseTree(yytext); return READ;} write {yylval = new ParseTree(yytext); return WRITE;} lambda {yylval = new ParseTree(yytext); return LAMBDA;} new {yylval = new ParseTree(yytext); return NEW;} [a-zA-Z0-9_]+ {yylval = new ParseTree(yytext); return ID;} <<EOF>> { return 0; } [ \t\n]+ { } "#".* { } . { cerr << "Unrecognized token!" << endl; exit(1); } %%