summaryrefslogtreecommitdiff
path: root/dviware/crudetype/version3/w2c.lex
diff options
context:
space:
mode:
Diffstat (limited to 'dviware/crudetype/version3/w2c.lex')
-rw-r--r--dviware/crudetype/version3/w2c.lex173
1 files changed, 173 insertions, 0 deletions
diff --git a/dviware/crudetype/version3/w2c.lex b/dviware/crudetype/version3/w2c.lex
new file mode 100644
index 0000000000..d9dc5d5ed5
--- /dev/null
+++ b/dviware/crudetype/version3/w2c.lex
@@ -0,0 +1,173 @@
+%{
+#include "w2c.h"
+#include "w2cy.h"
+#ifdef ANSI
+int yylex(void);
+#ifndef BSD
+static void unput(char);
+static int input(void);
+#endif
+#endif
+char conditional[20], negbuf[2], temp[20];
+extern boolean doing_statements;
+%}
+DIGIT [0-9]
+ALPHA [a-zA-Z]
+ALPHANUM ({DIGIT}|{ALPHA})
+IDENTIFIER ({ALPHA}{ALPHANUM}*)
+NUMBER ({DIGIT}+)
+SIGN ("+"|"-")
+SIGNED ({SIGN}?{NUMBER})
+WHITE [ \n\t]+
+REAL ({NUMBER}"."{NUMBER}("e"{SIGNED})?)|({NUMBER}"e"{SIGNED})
+COMMENT (("{"[^}]*"}")|("(*"([^*]|"*"[^)])*"*)"))
+W ({WHITE}|"packed")+
+WW ({WHITE}|{COMMENT}|"packed")*
+HHB0 ("hh"{WW}"."{WW}"b0")
+HHB1 ("hh"{WW}"."{WW}"b1")
+
+%%
+{W} ;
+"{" {while (input() != '}');
+ }
+"#" {
+ register int c;
+ (void) putc('#', std);
+ while ((c = input()) && c != ';')
+ (void) putc(c, std);
+ (void) putc('\n', std);
+ }
+"ifdef(" {register int c;
+ register char *cp=conditional;
+ new_line();
+ (void) input();
+ while ((c = input()) != '\'')
+#ifdef MS_DOS
+ *cp++ = (char) c;
+#else
+ *cp++ = c;
+#endif
+ *cp = '\0';
+ (void) input();
+ if (doing_statements) fputs("\t;\n", std);
+ (void) fprintf(std,
+ "#ifdef %s\n", conditional);
+ }
+"endif(" {register int c;
+ new_line();
+ fputs("#endif /* ", std);
+ (void) input();
+ while ((c = input()) != '\'')
+ (void) putc(c, std);
+ (void) input();
+ conditional[0] = '\0';
+ fputs(" */\n", std);
+ }
+"forward" return(last_tok=forward_tok) ;
+"external" return(last_tok=extern_tok) ;
+"@define" return(last_tok=define_tok);
+"@field" return(last_tok=field_tok);
+"and" return(last_tok=and_tok) ;
+"array" return(last_tok=array_tok) ;
+"begin" return(last_tok=begin_tok) ;
+"case" return(last_tok=case_tok) ;
+"const" return(last_tok=const_tok) ;
+"div" return(last_tok=div_tok) ;
+"break" return(last_tok=break_tok);
+"do" return(last_tok=do_tok) ;
+"downto" return(last_tok=downto_tok) ;
+"else" return(last_tok=else_tok) ;
+"end" return(last_tok=end_tok) ;
+"file" return(last_tok=file_tok) ;
+"for" return(last_tok=for_tok) ;
+"function" return(last_tok=function_tok) ;
+"goto" return(last_tok=goto_tok) ;
+"if" return(last_tok=if_tok) ;
+"label" return(last_tok=label_tok) ;
+"mod" return(last_tok=mod_tok) ;
+"not" return(last_tok=not_tok) ;
+"of" return(last_tok=of_tok) ;
+"or" return(last_tok=or_tok) ;
+"procedure" return(last_tok=procedure_tok) ;
+"program" return(last_tok=program_tok) ;
+"record" return(last_tok=record_tok) ;
+"repeat" return(last_tok=repeat_tok) ;
+{HHB0} return(last_tok=hhb0_tok) ;
+{HHB1} return(last_tok=hhb1_tok) ;
+"then" return(last_tok=then_tok) ;
+"to" return(last_tok=to_tok) ;
+"type" return(last_tok=type_tok) ;
+"until" return(last_tok=until_tok) ;
+"var" return(last_tok=var_tok) ;
+"with" return(last_tok=with_tok) ;
+"new" return(last_tok=new_tok) ;
+"while" return(last_tok=while_tok) ;
+"others" return(last_tok=others_tok) ;
+"write" return(last_tok=write_tok) ;
+"writeln" return(last_tok=writeln_tok) ;
+{REAL} {
+ (void) sprintf(temp, "%s%s", negbuf, yytext);
+ negbuf[0] = '\0';
+ return(last_tok=r_num_tok) ;
+ }
+{NUMBER} {
+ (void) sprintf(temp, "%s%s", negbuf, yytext);
+ negbuf[0] = '\0';
+ return(last_tok=i_num_tok) ;
+ }
+("'"([^']|"''")"'") return(last_tok=single_char_tok) ;
+("'"([^']|"''")*"'") return(last_tok=string_literal_tok) ;
+"+" { if ((last_tok>=undef_id_tok &&
+ last_tok<=field_id_tok) ||
+ last_tok==i_num_tok ||
+ last_tok==r_num_tok ||
+ last_tok==')' ||
+ last_tok==']')
+ return(last_tok='+') ;
+ else return(last_tok=unary_plus_tok) ; }
+"-" { if ((last_tok>=undef_id_tok &&
+ last_tok<=field_id_tok) ||
+ last_tok==i_num_tok ||
+ last_tok==r_num_tok ||
+ last_tok==')' ||
+ last_tok==']')
+ return(last_tok='-') ;
+ else {
+ int c;
+ while ((c = input()) == ' ' || c == '\t');
+#ifdef MS_DOS
+ unput((char) c);
+#else
+ unput(c);
+#endif
+ if (c < '0' || c > '9') {
+ return(last_tok = unary_minus_tok);
+ }
+ negbuf[0] = '-';
+ }}
+"*" return(last_tok='*') ;
+"/" return(last_tok='/') ;
+"=" return(last_tok='=') ;
+"<>" return(last_tok=not_eq_tok) ;
+"<" return(last_tok='<') ;
+">" return(last_tok='>') ;
+"<=" return(last_tok=less_eq_tok) ;
+">=" return(last_tok=great_eq_tok) ;
+"(" return(last_tok='(') ;
+")" return(last_tok=')') ;
+"[" return(last_tok='[') ;
+"]" return(last_tok=']') ;
+":=" return(last_tok=assign_tok) ;
+".." return(last_tok=two_dots_tok) ;
+"." return(last_tok='.') ;
+"," return(last_tok=',') ;
+";" return(last_tok=';') ;
+":" return(last_tok=':') ;
+"^" return(last_tok='^') ;
+{IDENTIFIER} { (void) strcpy(last_id,yytext) ;
+ l_s=search_table(last_id) ;
+ if (l_s) return(last_tok=sym_table[l_s].typ);
+ else return(last_tok=undef_id_tok);
+ }
+. return(last_tok=unknown_tok) ;
+%%