C++ I can't figure out how to write a recursive descent parser for the following grammar:
<Datalog Program> -> Schemes : <Scheme List>
Facts : <Fact List>
Rules : <Rule List>
Queries : <Query List>
<EOF>
<Scheme List> -> <Scheme> <Scheme List Tail>
<Scheme List Tail> -> <Scheme List> | ε
<Scheme> -> <Identifier> ( <Identifier List> )
<Identifier List> -> <Identifier> <Identifier List Tail>
<Identifier List Tail>-> , <Identifier List> | ε
<Fact List> -> <Fact> <Fact List> | ε
<Fact> -> <Identifier> ( <Constant List> ) .
<Constant List> -> <String> <Constant List Tail>
<Constant List Tail> -> , <Constant List> | ε
<Rule List> -> <Rule> <Rule List> | ε
<Rule> -> <Head Predicate> :- <Predicate List> .
<Head Predicate> -> <Identifier> ( <Identifier List> )
<Predicate List> -> <Predicate> <Predicate List Tail>
<Predicate List Tail> -> , <Predicate List> | ε
<Predicate> -> <Identifier> ( <Parameter List> )
<Parameter List> -> <Parameter> <Parameter List Tail>
<Parameter List Tail> -> , <Parameter List> | ε
<Parameter> -> <String> | <Identifier> | <Expression>
<Expression> -> ( <Parameter> <Operator> <Parameter> )
<Operator> -> + | *
<Query List> -> <Query> <Query List Tail>
<Query List Tail> -> <Query List> | ε
<Query> -> <Predicate> ?
This is a simple datalog-like grammar. I'm absolutely lost in trying to write the parser. I've already written a Lexical Analyzer that outputs a vector with all the tokens. I know that I need to write methods for each production, but I can't figure out how to connect the tokens into a parse tree (so I can run a toString() function after the tree is complete). I need to be pointed into the right direction. Thanks.