| Newsgroups |
gmane.comp.parsers.bison.general |
| Message-ID |
<[email protected]> |
On 23.02.19 06:00, [email protected] wrote:
> Thanks for you help. Now i've typed in one of the first examples and
> it throws me an strange error:
>
> > flex01.l:99: premature EOF
>
> The code looks like this:
>
> %{
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
>
> enum {
> LOOKUP = 0,
> BOOL,
> INT,
> FLOAT,
> STRING,
> VEC2,
> VEC3,
> VEC4
> };
>
> int state;
>
> int add_word(int type, char *word);
> int lookup_word(char *word);
>
> ⅝}
>
> %%
>
> \n { state = LOOKUP; }
> ^bool { state = BOOL; }
> ^int { state = INT; }
> ^float { state = FLOAT; }
> ^string { state = STRING; }
> ^vec2 { state = VEC2; }
> ^vec3 { state = VEC3; }
> ^vec4 { state = VEC4; }
>
> [a-zA-z] {
> if(state == LOOKUP){
> add_word(state, yytext);
> }else{
> switch(lookup_word(yytext)){
> case BOOL: printf("%s is a bool variable.\n"); break;
> case INT: printf("%s is a int variable.\n"); break;
> case FLOAT: printf("%s is a float variable.\n");
> break;
> case STRING: printf("%s is a string variable.\n");
> break;
> case VEC2: printf("%s is a vec2 variable.\n"); break;
> case VEC3: printf("%s is a vec3 variable.\n"); break;
> case VEC4: printf("%s is a vec4 variable.\n"); break;
> default: { printf("%s not recognized!\n", yytext);
> break; }
> }
> }
> }
>
> %%
>
> struct word {
> char *word_name;
> int word_type;
> struct word *next;
> };
>
> struct word *wordlist;
>
> int add_word(int type, char *word)
> {
> struct word *wp;
>
> if(lookup_word(word) != LOOKUP){
> printf("Word %s already in the symbol table!\n", word);
> return 0;
> }
>
> wp = (struct word *) malloc(sizeof(struct word));
>
> wp->next = word_list;
> wp->word_name = (char*) malloc((sizeof(char)*strlen(word))+1);
> strcpy(wp->word_name, word);
> wp->word_type = type;
> word_list = wp;
> return 1;
> }
>
> int lookup_word(char *word)
> {
> struct word *wp = word_list;
>
> for(; wp; wp=wp->next){
> if(strcmp(wp->word_name, word) == 0){
> return wp->word_type;
> }
> }
>
> return LOOKUP;
> }
>
> int main(int argc, char **argv)
> {
> yylex();
>
> return 0;
> }
>
> Why is the there an premature EOF ??
>
>
> best regards!
>
>
>
>
>
>
> On 22.02.19 18:29, Jannick wrote:
>> On Fri, 22 Feb 2019 17:02:57 +0100, [email protected] wrote:
>>
>>> $gcc lex.yy.c -o test -Wall
>> Comparing to your earlier compile statement, you dropped '-lfl' which
>> caused the linking error. To remedy the situation add to the top of
>> the flex file
>>
>> %option noyywrap
>> %option noinput nounput
>>
>> Then the errors should go away. The first option makes linking
>> against the flex library obsolete.
>>
>> Enjoy flex.
>>
>> HTH
>> J.
>>
>>
>> _______________________________________________
>> [email protected] https://lists.gnu.org/mailman/listinfo/help-bison
>>
>
> _______________________________________________
> [email protected] https://lists.gnu.org/mailman/listinfo/help-bison
> _______________________________________________
> [email protected] https://lists.gnu.org/mailman/listinfo/help-bison
_______________________________________________
[email protected] https://lists.gnu.org/mailman/listinfo/help-bison