The objective of this assignment is to
design and implement a query language. The language should
cover an adequate set of queries in some domain. The implementation
should parse queries and return answers. The solution should
include complete source code and documentation, which includes
a human-readable grammar, a user manual, and a
compiling the system.
The syntax can resemble a formal or a natural language, e.g. SQL or English. The implementation can use BNFC or GF. Also an embedded language is allowed, but the host language tools (such as a Haskell interpreter) must be hidden from the user. The expected size of the language is 50--100 abstract syntax rules, thus about three times the size of the language in the book, Section 8.10. It should cover infinitely many different queries. The answering engine can be a database, a web service, or a program such as a mathematical problem solver.
The language should be usable as a shell program, with the following syntax of interaction:
$ query "<QUERY-IN-THE-LANGUAGE>" <ANSWER-TO-THE-QUERY>
You are also welcome to deliver it as a web application. But the shell program is needed for testing purposes, because it can easily be scripted.
Your solution must contain the following parts:
Makefile, which enables the compilation of your system by typing
You can assume the availability of all the tools called by BNFC, such as parser generators and compilers; these tools should not be included in the submission.