Thanks, that seems to get around \x00 -- unfortunately, the same issue then reappears with the values \x80 - \xff … I could special case every single value e.g.
\x00 {return ZERO; } \x80 { return X80; } \x81 { return X81; } : \xff { return XFF; } . | \n { return *yytext; } But seems a bit clumsy. Any thoughts? > On Mar 30, 2021, at 17:01, Chris verBurg <cheetomons...@gmail.com> wrote: > > > Running bison (first) with -d should produce a bison.tab.h file, that your > flex input should #include to get the definitions of %token names. > > -Chris > > > >> On Mar 30, 2021, at 1:34 PM, Stephen Taylor <stnh.em...@icloud.com> wrote: >> >> >> That appears to give me an error in lex: >> >> %option noyywrap >> >> >> %% >> >> \x00 { return ZERO; } >> >> .|\n { return *yytext; } >> >> %% >> >> >> >> — >> Error: >> >> flex -8 gmr.l >> gcc -c lex.yy.c >> gmr.l: In function ‘yylex’: >> gmr.l:2:10: error: ‘ZERO’ undeclared (first use in this function); did you >> mean ‘EIO’? >> \x00 { return ZERO; } >> ^~~~ >> EIO >> gmr.l:2:10: note: each undeclared identifier is reported only once for each >> function it appears in >> Makefile:13: recipe for target 'lex.yy.o' failed >> make: *** [lex.yy.o] Error 1 >> >> >> Bison likes it. >> Tried quoting the \x00 but thats not right it appears. >> >> >> >>> On Mar 30, 2021, at 16:15, Chris verBurg <cheetomons...@gmail.com> wrote: >>> >>> >>> I don’t know how you’ve set up your flex/bison interface, but I’m guessing >>> from your quoting that you have flex return each character as a token? Can >>> you special-case 0 to not have the token value 0? That is, flex does this: >>> >>> \x00 { return ZERO; } >>> >>> And then in your grammar: >>> >>> %token ZERO >>> >>> and use ZERO instead of ‘\x00’? >>> >>> (Note: typed this on a phone..not 100% sure the syntax is right.) >>> >>> -Chris >>> >>> >>>> On Mar 30, 2021, at 12:37 PM, Stephen Taylor via Users list for the GNU >>>> Bison parser generator <help-bison@gnu.org> wrote: >>>> >>>> I am trying to parse binary files and obviously need to write rules that >>>> include the 8-bit value 0x00 — flex appears to allow me to obtain an 8-bit >>>> scanner using the -8 option. I seem to be able to use ‘\x01’ to ‘\xFF’ for >>>> individual terminal symbols in Bison rules. Unfortunately, ‘\x00’ is used >>>> to denote end of input. Looking at the output tables, there appears to be >>>> no real reason to do this (other than convenience) and I am wondering if >>>> anyone has a workaround? >>>> Thanks ! >>>> Steve >>>> >>>> >>>> >>>> >>> >>
smime.p7s
Description: S/MIME cryptographic signature