d3e6f89829
* alias: more early work * alias: test cases working for sqlite * alias: SQL builder tests * alias: func (col expr) aliases now working for SQLite * linting * CHANGELOG update * Docs update * Docs update * Rename buildAst() -> buildAST() * CHANGELOG typo |
||
---|---|---|
.. | ||
testdata | ||
antlr-4.12.0-complete.jar | ||
generate.go | ||
generate.sh | ||
README.md | ||
SLQ.g4 |
SLQ Grammar
The query language used by sq
is formally known as SLQ. The
grammar is defined in SLQ.g4
, which is an ANTLR4 grammar.
There's a bunch of valid sample input in the testdata
dir.
The antlr4
tool generates the parser / lexer files from the grammar.
Being that antlr4
is Java-based, Java must be installed to regenerate
from the grammar. The process is encapsulated in generate.sh
(or execute
go generate ./...
).
The generated .go
files ultimately end up in package libsq/ast/internal/slq
. Files
in this directory should not be directly edited.
The libsq/ast.Parse
function takes a SLQ
input string and returns an *ast.AST
.
The entrypoint that accepts the SLQ string is libsq.ExecuteSLQ
, which ultimately
invokes ast.Parse
.
Working with the grammar
You probably should install the antlr tools.
pip install antlr4-tools
You may also find antlr4ts useful.
npm install antlr4ts
And there are various IDE plugins available.
In particular, note the VS Code extension.