[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Using Yacc and Lex to parse a char * in C, and execute a function.
From: |
N07070 |
Subject: |
Using Yacc and Lex to parse a char * in C, and execute a function. |
Date: |
Fri, 20 Mar 2020 16:49:14 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 |
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.
- Using Yacc and Lex to parse a char * in C, and execute a function.,
N07070 <=