How to get entire input string in Lex and Yacc?
        Posted  
        
            by DevDevDev
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by DevDevDev
        
        
        
        Published on 2009-08-05T23:25:45Z
        Indexed on 
            2010/05/09
            6:18 UTC
        
        
        Read the original article
        Hit count: 430
        
OK, so here is the deal.
In my language I have some commands, say
XYZ 3 5
GGB 8 9
HDH 8783 33
And in my Lex file
XYZ { return XYZ; }
GGB { return GGB; }
HDH { return HDH; }
[0-9]+ { yylval.ival = atoi(yytext); return NUMBER; }
\n  { return EOL; }
In my yacc file
start : commands
    ;
commands : command
         | command EOL commands
    ;
    command : xyz
            | ggb
            | hdh
    ;
    xyz : XYZ NUMBER NUMBER { /* Do something with the numbers */ }
       ;
    etc. etc. etc. etc.
My question is, how can I get the entire text
XYZ 3 5
GGB 8 9
HDH 8783 33
Into commands while still returning the NUMBERs?
Also when my Lex returns a STRING [0-9a-zA-Z]+, and I want to do verification on it's length, should I do it like
rule: STRING STRING { if (strlen($1) < 5 ) /* Do some shit else error */ }
or actually have a token in my Lex that returns different tokens depending on length?
© Stack Overflow or respective owner