| Newsgroups |
gmane.comp.parsers.bison.general |
| Message-ID |
<[email protected]> |
Found the problem ... by second %} was not %} but a ⅝} which look in the
terminal nearly like a % sign ... stupid me =|.
Thanks in advance!
On 23.02.19 06:30, [email protected] wrote:
>
> 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
_______________________________________________
[email protected] https://lists.gnu.org/mailman/listinfo/help-bison