%{ /* -*- Mode: c++; -*- */ #include #include #include "mytree.h" #include "jj.tab.h" extern int yylineno; extern int yypos; int comment_level=0; extern "C" int yywrap(void){return 1;} %} %x comment escaped \\(.|\n) string_char [^"\\]|{escaped} stupid_xemacs_font_lock [^"] %% \[ {yypos++; assert(comment_level==0); comment_level=1; BEGIN comment;} \"{string_char}*\" {yypos+=yyleng;} \] {yypos++; assert(comment_level>0); comment_level--; if (!comment_level)BEGIN 0;} \[ {yypos++; comment_level++; /*comments can be nested*/} \n {yylineno++;yypos=1;}; . {yypos++;/*fprintf(stderr,"minigram.lc:%d:%d: c%d '%s'\n",yylineno,yypos,comment_level,yytext);*/} [\t ]+ {yypos+=yyleng;}; \( { yypos++;return gk_f;} \) { yypos++;return gk_j;} \"{string_char}*\" {yypos+=yyleng;yylval.non_id=new tr_id(yytext); yylval.non_id->trim_off_ends(); return gk_astring;} :float=[0-9e.-]+ {yypos+= yyleng; yylval.non_id=new tr_id(yytext+7); return gk_id; } \n {yylineno++;yypos=1;}; :as {yypos+=yyleng;yylval.non_id=new tr_id("as");return gk_AS;} :case {yypos+=yyleng;yylval.non_id=new tr_id("case");return gk_CASE;} :cbeg {yypos+=yyleng;yylval.non_id=new tr_id("cbeg");return gk_CBEG;} :cc {yypos+=yyleng;yylval.non_id=new tr_id("cc");return gk_CC;} :cfd {yypos+=yyleng;yylval.non_id=new tr_id("cfd");return gk_CFD;} :class {yypos+=yyleng;yylval.non_id=new tr_id("class");return gk_CLASS;} :compose {yypos+=yyleng;yylval.non_id=new tr_id("compose");return gk_COMPOSE;} :cons {yypos+=yyleng;yylval.non_id=new tr_id("cons");return gk_CONS;} :cons-list {yypos+=yyleng;yylval.non_id=new tr_id("cons_list");return gk_CONS_LIST;} :context {yypos+=yyleng;yylval.non_id=new tr_id("context");return gk_CONTEXT;} :data {yypos+=yyleng;yylval.non_id=new tr_id("data");return gk_DATA;} :deriving {yypos+=yyleng;yylval.non_id=new tr_id("deriving");return gk_DERIVING;} :do {yypos+=yyleng;yylval.non_id=new tr_id("do");return gk_DO;} :export-everything {yypos+=yyleng;yylval.non_id=new tr_id("export_everything");return gk_EXPORT_EVERYTHING;} :field {yypos+=yyleng;yylval.non_id=new tr_id("field");return gk_FIELD;} :fn {yypos+=yyleng;yylval.non_id=new tr_id("fn");return gk_FN;} :fpat {yypos+=yyleng;yylval.non_id=new tr_id("fpat");return gk_FPAT;} :fun {yypos+=yyleng;yylval.non_id=new tr_id("fun");return gk_FUN;} :generic {yypos+=yyleng;yylval.non_id=new tr_id("generic");return gk_GENERIC;} \:\= {yypos+=yyleng;yylval.non_id=new tr_id(":=");return gk_HEXTOKEN__3A3D;} :instance {yypos+=yyleng;yylval.non_id=new tr_id("instance");return gk_INSTANCE;} :list {yypos+=yyleng;yylval.non_id=new tr_id("list");return gk_LIST;} :lit {yypos+=yyleng;yylval.non_id=new tr_id("lit");return gk_LIT;} :mcons {yypos+=yyleng;yylval.non_id=new tr_id("mcons");return gk_MCONS;} :mlist {yypos+=yyleng;yylval.non_id=new tr_id("mlist");return gk_MLIST;} :mtuple {yypos+=yyleng;yylval.non_id=new tr_id("mtuple");return gk_MTUPLE;} :newtype {yypos+=yyleng;yylval.non_id=new tr_id("newtype");return gk_NEWTYPE;} :nil {yypos+=yyleng;yylval.non_id=new tr_id("nil");return gk_NIL;} :nondet {yypos+=yyleng;yylval.non_id=new tr_id("nondet");return gk_NONDET;} :nothing {yypos+=yyleng;yylval.non_id=new tr_id("nothing");return gk_NOTHING;} :no-sig {yypos+=yyleng;yylval.non_id=new tr_id("no_sig");return gk_NO_SIG;} :pchar {yypos+=yyleng;yylval.non_id=new tr_id("pchar");return gk_PCHAR;} :pipe {yypos+=yyleng;yylval.non_id=new tr_id("pipe");return gk_PIPE;} :plist {yypos+=yyleng;yylval.non_id=new tr_id("plist");return gk_PLIST;} :pstring {yypos+=yyleng;yylval.non_id=new tr_id("pstring");return gk_PSTRING;} :ptuple {yypos+=yyleng;yylval.non_id=new tr_id("ptuple");return gk_PTUPLE;} :strict {yypos+=yyleng;yylval.non_id=new tr_id("strict");return gk_STRICT;} :tuple {yypos+=yyleng;yylval.non_id=new tr_id("tuple");return gk_TUPLE;} :ty {yypos+=yyleng;yylval.non_id=new tr_id("ty");return gk_TY;} :type-class {yypos+=yyleng;yylval.non_id=new tr_id("type_class");return gk_TYPE_CLASS;} :type-synonym {yypos+=yyleng;yylval.non_id=new tr_id("type_synonym");return gk_TYPE_SYNONYM;} :tysig {yypos+=yyleng;yylval.non_id=new tr_id("tysig");return gk_TYSIG;} :unit {yypos+=yyleng;yylval.non_id=new tr_id("unit");return gk_UNIT;} :where {yypos+=yyleng;yylval.non_id=new tr_id("where");return gk_WHERE;} [a-z_A-Z0-9][^\t\n()\[\]" ]* { yypos+=yyleng; yylval.non_id=new tr_id(yytext); yylval.non_id->swap_dash_and_underbar(); return gk_id;} [^\t\n()\[\]" ]+ { yypos+=yyleng; yylval.non_id=new tr_id(yytext); yylval.non_id->possibly_parenthesize(); return gk_id;} . {yypos++;fprintf(stderr,"%s:%d:%d: lexer confused by '%s'\n",filename,yylineno,yypos,yytext);my_error_count++;} %%