• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 186
  • Last Modified:

HI more lex and yacc

Hi, sometimes my lex compiler refuses to let me make a new rule for example something like this abc "abc"
{abc}{return(V1);}
It will say rule abc not know. It's driving me nut, please help.
0
laeuchli
Asked:
laeuchli
  • 6
  • 6
1 Solution
 
ahoffmannCommented:
if you have not missed the  %%  separator, please post the file.
0
 
laeuchliAuthor Commented:
The file is a little long to post, and besides that it is on a linux filesystem. I would just like to know what can make lex do that.
jesse

0
 
ahoffmannCommented:
will be hard to analyze without having the code :(
Anyway, check with  lex -v  what are the tables sizes used(needeed in you program, probably you need to adjust them (see %p %n %a %e %k %o)

0
Worried about phishing attacks?

90% of attacks start with a phish. It’s critical that IT admins and MSSPs have the right security in place to protect their end users from these phishing attacks. Check out our latest feature brief for tips and tricks to keep your employees off a hackers line!

 
laeuchliAuthor Commented:
explain the table sizes please. If that does not help I will try to get to code.
Thanks

0
 
ahoffmannCommented:
If you use -v option to lex, it print a statistic about lex's internal table usage and sizes. These table sizes can be preset with the spezial %p etc. keywords. Please read lex's man-page for details, it's to much to explain here.
I'm not shure if this is your problem, just an assumtion, 'cause you do give any errors or code :-(
0
 
laeuchliAuthor Commented:
%{
#include <stdio.h>
#include <stdlib.h>
#include "os.h"
int k=0;
%}

bootc "void main()"  
equal "="
par ["]
ifj "ifj"
word [A-Za-z0-9]*
num [0-9]*
exit "QUIT"
partb "char"
lb "["
rb "]"
semi [;]
%%
{exit}  {exit(0);}
{partb} {return(V1);}
{lb}    {return(V2);}
{rb}    {return(V3);}
{par}   {return(V4);}
{bootc} {return(BOOTC);}
{ifj}{return(V9);}
{equal} {return(V5);}
{semi}  {return(V6);}
{num} {return(V7);}
{word} {
strcpy(yylval.hold,yytext);
return(V8);
}
%%


Here is the code.  I still can'r get it to compile.



0
 
ahoffmannCommented:
{ifj}      {return(V4);}
0
 
lafangaCommented:
Guess!! this is something new for me.  
Is there any place where I can know more about this??

0
 
laeuchliAuthor Commented:
ahoffmann what do you want me to do about the think that I am already returning with V4. Why would I do this? Please tell me more.  lafanga look at my bio and look at the ? looking in a file.



0
 
ahoffmannCommented:
laeuchli, did you replace you rule with the one i posted?
It's slightly different (blanks ;-)

lafanga, how about:  man lex; man yacc
0
 
laeuchliAuthor Commented:
Yes I did and it worked. I would now like to know why?

0
 
ahoffmannCommented:
read  man lex  ;-)
(at least one white space must seperate a rule from it's actions)
0
 
laeuchliAuthor Commented:
OHH, I feel dumb. Thanks a lot for your help.

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

The Firewall Audit Checklist

Preparing for a firewall audit today is almost impossible.
AlgoSec, together with some of the largest global organizations and auditors, has created a checklist to follow when preparing for your firewall audit. Simplify risk mitigation while staying compliant all of the time!

  • 6
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now