Datalog Parser
Project 2
Checking Syntax
Comments
The Parser Class -- Interclass weaving
Token.h:13:7: error: redefinition of ‘class Token’
class Token {
^~~~~
The Parser Class
From Grammar to Program
fact -> ID LEFT_PAREN STRING stringList RIGHT_PAREN PERIOD
Checking the next Token's type
parse()
datalogProgram()
scheme()
headPredicate()
idList()
throw currentToken;
try {
...
} catch (Token error) {
...
}
Easy Matching
Failure!
(Q_MARK,"?",10)
When a nonterminal has more than one production
Test your syntax-checking code
Creating Objects
Using the Tokens
Schemes:
snap(S,N,A,P)
HasSameAddress(X,Y)
Facts:
snap('12345','C. Brown','12 Apple','555-1234').
snap('33333','Snoopy','12 Apple','555-1234').
Rules:
HasSameAddress(X,Y) :- snap(A,X,B,C),snap(D,Y,B,E).
Queries:
HasSameAddress('Snoopy',Who)?
Predicates
Rules:
HasSameAddress(X,Y) :- snap(A,X,B,C),snap(D,Y,B,E).
Head predicate
Body predicates
Parameters
Rules:
alpha(X,Y) :- beta(X,C,'Bob'),gamma(P,'Jim',Y).
DatalogProgram
toString()
Domain
Domain(6):
'12 Apple'
'12345'
'33333'
'555-1234'
'C. Brown'
'Snoopy'
Modify the Parser to Populate these Classes
Test your datalog-structuring code
Reminders:
Common Pitfalls
datalogProgram -> SCHEMES COLON scheme schemeList
FACTS COLON factList
RULES COLON ruleList
QUERIES COLON query queryList
Where to Start