ir compiling!
[henge/apc.git] / src / lexer.rl
index 3440e24..f6d25aa 100644 (file)
@@ -38,10 +38,11 @@ yycstate* apc_cstate;
                                }
                              exit(1);
                            }
-                         yypush_parse(apc_pstate, REF, &ref, apc_cstate);
+                         tok_val.ref = ref;
+                         yypush_parse(apc_pstate, REF, &tok_val, apc_cstate);
                           ntok++;
                        }
-  action push_link      { yypush_parse(apc_pstate, LINK, (YYSTYPE) 0, apc_cstate);}
+  action push_link      { tok_val.val = 0; yypush_parse(apc_pstate, LINK, &tok_val , apc_cstate);}
   action push_val       { int val;
                           te = NULL; errno = 0;
                           val = strtoll((char*)ts,(char**)&te,10);
@@ -49,52 +50,65 @@ yycstate* apc_cstate;
                            { fprintf(stderr, "strtoll could not parse %s\n", (char*)str);
                              exit(1);
                            }
-                         yypush_parse(apc_pstate, NUM, &val, apc_cstate);
+                         tok_val.val = val;
+                         yypush_parse(apc_pstate, NUM, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_name      { printf("Lexer_lexstring:: action:push_name: from %s to %s\n", ts, p);
-                          yypush_parse( apc_pstate, NAME, strdndup(ts, p-ts), apc_cstate);
+                          *p = '\0';
+                         tok_val.str = ts;
+                          yypush_parse( apc_pstate, NAME, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_map       { printf("Lexer_lexstring:: action:push_map: pushing map token\n");
-                          yypush_parse(apc_pstate, MAP, (uint8_t*) '~', apc_cstate);
+                          tok_val.str = (uint8_t*) '~';
+                          yypush_parse(apc_pstate, MAP, &tok_val, apc_cstate);
                           ntok++;
                        }
   action set_ts         { printf("Lexer_lexstring:: action:set_ts. ts = %s\n", p); ts = p; }
   action push_SS        { printf("Lexer_lexstring:: action:push_SS. p = %s\n",p);
-                          yypush_parse(apc_pstate, SS, (uint8_t*) "SS", apc_cstate);
+                          tok_val.str = (uint8_t*) "SS";
+                          yypush_parse(apc_pstate, SS, &tok_val, apc_cstate);
                           ntok++;
                         }
   action push_S         { printf("Lexer_lexstring:: action:push_S. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 0, apc_cstate);
+                          tok_val.val = 0;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_SW        { printf("Lexer_lexstring:: action:push_SW. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 1, apc_cstate);
+                          tok_val.val = 1;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                        }
   action push_W         { printf("Lexer_lexstring:: action:push_W. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 2, apc_cstate);
+                          tok_val.val = 2;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_NW        { printf("Lexer_lexstring:: action:push_NW. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 3, apc_cstate);
+                          tok_val.val = 3;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_N         { printf("Lexer_lexstring:: action:push_N. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 4, apc_cstate);
+                          tok_val.val = 4;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_NE        { printf("Lexer_lexstring:: action:push_NE. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 5, apc_cstate);
+                          tok_val.val = 5;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_E         { printf("Lexer_lexstring:: action:push_N. p = %s\n", p);
-                          yypush_parse(apc_pstate, FACING, (YYSTYPE) 6, apc_cstate);
+                          tok_val.val = 6;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action push_SE        { printf("Lexer_lexstring:: action:push_N. p = %s\n", p);
-                          ypush_parse(apc_pstate, FACING, (YYSTYPE) 7, apc_cstate);
+                          tok_val.val = 7;
+                          yypush_parse(apc_pstate, FACING, &tok_val, apc_cstate);
                          ntok++;
                         }
   action ref_error      { printf("ref from %s to %s has an inappropriate amount of hex digits, it must have eight.\n", ts, p);
@@ -135,12 +149,14 @@ int lexer_lexstring
   int size
 )
 { uint8_t *p; 
-  uint8_t *ts, *pe, *te;
-  int cs, ntok, eof;//, tok_t;
+  uint8_t *ts, *pe, *te, *eof;
+  int cs, ntok;
+  union YYSTYPE tok_val; 
 
   ntok = 0;
   p = ts = str;
-  pe = p + size + 1;
+  pe = eof =  p + size + 1;
+  
 
   printf("|---Begin lexstring on p = %s, pe = %s.\n",p, pe);