rlb7h@uvaee.ee.virginia.EDU (Robert L. Blackburn) (05/12/89)
I am trying to write a YACC specification for a VHDL parser. When attempting to generate the .c file with yacc I get the following message: fatal error: too many states, line 1198 (line 1198 is the end of the input file). The abbrevieated y.output file contains the line: 557/600 grammar rule, 749/750 states My question: is there any way to raise the limit on the number of states YACC will allow? Failing that, are there some general techniques I can use in my specification (or things to avoid in my specification) to reduce the number of states YACC tries to produce? Better yet (hoping against hope), does anyone already have a grammer for VHDL that they would care to give me the [YACC] sources for? Thanks in advance. -Robert Blackburn
rbj@dsys.icst.nbs.gov (Root Boy Jim) (05/16/89)
? From: "Robert L. Blackburn" <rlb7h@uvaee.ee.virginia.edu> ? I am trying to write a YACC specification for a VHDL parser. When attempting ? to generate the .c file with yacc I get the following message: ? fatal error: too many states, line 1198 ? (line 1198 is the end of the input file). ? The abbrevieated y.output file contains the line: ? 557/600 grammar rule, 749/750 states ? My question: is there any way to raise the limit on the number of states YACC ? will allow? Failing that, are there some general techniques I can use in my ? specification (or things to avoid in my specification) to reduce the number of ? states YACC tries to produce? ? Better yet (hoping against hope), does anyone already have a grammer for ? VHDL that they would care to give me the [YACC] sources for? ? Thanks in advance. Now I haven't done much haccing with yack, but I remember seeing something about recompiling with some parameter set higher. Not much help if you don't have source. Perhaps you should get GNU's BISON, a P.D. YACC. There is one more thing that might help you. The obvious thing to do is recognize each keyword in a separate rule. However, this creates parsers that run slower. Better is to have the `identifier' recognizer look for keywords. Actually, I think I am talking bout LEX here, but the point still is valid. Unfortunately, that technique won't help you for YACC. Oh well... Another technique is to tweak your grammar to recognize a superset of legal constructions and add other code to disallow them. For example, a YACC specification for C might recognize "double int x", as well as "long int x", and the error might be caught later. If this is a stupid example, sorry, I can't think of a better one. ? -Robert Blackburn Root Boy Jim is what I am Are you what you are or what?