Using Yacc and Lex to parse a char * in C, and execute a function.

N07070 <[email protected]>
Newsgroups gmane.comp.parsers.bison.general
Message-ID <[email protected]>
Hello all,

I am a student of computer science, and I am currently writing an
implementation of CRobots with Yacc and Lex.

Currently, the program works like this :

- Tokens are defined in the .lex file

- The grammar is defined in the .yacc file

- The main function is defined in a .c file, which in turn, calls the
yyparse function, with a few arguments.

What I would like, is to be able to call the yyparse function, give it a
string, which it will parse, and execute a function if the parsing is
successfull. As an example :

line        : digit command eol                 {;}
           ;
command     : wait expression                    {yywait(&* bob_the_bot,
$2); * next_line += 1;}
             | poke expression expression        {yypoke(&*
bob_the_bot,$2,$3); * next_line += 1;}

All of the tokens are well defined, and when I compile with yacc -d
grammar_burp.yacc && flex burp.flex && gcc lex.yy.c y.tab.c gameEngine.c
-o burp , the compilation has no errors, but when I run the ./burp, I
get a prompt where I can type text, instead of just executing the char
passed to it.

I would like something like this to work ;

char * line = "0 WAIT (1+1)\n";

if(yyparse(line, rob, arn, next_line) == 0){
        printf("Parsing completed !\n l : %i\n nl : %i", line, next_line);
} else {
        perror("Parsing failed");
}

In this example, it would parse the char * line, find the wait
expression, validate it, and if successful, call the yywait() function.

If need be, I can provide the full source code of the project.

Thank you for your time.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.