mirror of
https://github.com/danbulant/lang-surrealql
synced 2026-07-08 04:20:55 +00:00
progress
This commit is contained in:
parent
9f75294bfa
commit
64d72fc3e4
1 changed files with 143 additions and 18 deletions
|
|
@ -7,6 +7,18 @@
|
||||||
statement
|
statement
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@precedence {
|
||||||
|
int,
|
||||||
|
array @left,
|
||||||
|
dot @left,
|
||||||
|
exp @left,
|
||||||
|
times @left,
|
||||||
|
plus @left,
|
||||||
|
comparison @left,
|
||||||
|
and @left,
|
||||||
|
or @left
|
||||||
|
}
|
||||||
|
|
||||||
@skip { whitespace | LineComment }
|
@skip { whitespace | LineComment }
|
||||||
|
|
||||||
kw<term> { @specialize[@name={term}]<identifier, term> }
|
kw<term> { @specialize[@name={term}]<identifier, term> }
|
||||||
|
|
@ -29,7 +41,7 @@ GeneratedRecordID {
|
||||||
Table ":" FunctionCall
|
Table ":" FunctionCall
|
||||||
}
|
}
|
||||||
Variable {
|
Variable {
|
||||||
kw<"$"> identifier
|
"$" identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
StringPrefix {
|
StringPrefix {
|
||||||
|
|
@ -39,17 +51,17 @@ StringPrefix {
|
||||||
@skip {} {
|
@skip {} {
|
||||||
String[isolate] {
|
String[isolate] {
|
||||||
StringPrefix?
|
StringPrefix?
|
||||||
('"' (stringContentDouble | Escape)* ('"' | "\n") |
|
('"' (stringContentDouble | Escape)* ('"') |
|
||||||
"'" (stringContentSingle | Escape)* ("'" | "\n"))
|
"'" (stringContentSingle | Escape)* ("'"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@precedence { decimal @left, float @left, integer @left }
|
|
||||||
|
|
||||||
Integer { int }
|
Integer { int }
|
||||||
Decimal { int ("." int)? "dec" }
|
Decimal { int !int ("." int)? "dec" }
|
||||||
Float { int (("." int) "f"? | "f" ) }
|
Float { int !int (("." int) "f"? | "f" ) }
|
||||||
number { Decimal !decimal | Float !float | Integer !integer }
|
Duration { int ("d" | "h" | "m" | "s" | "ms" | "us" | "ns") }
|
||||||
|
|
||||||
|
number { Decimal | Float | Integer }
|
||||||
|
|
||||||
Array {
|
Array {
|
||||||
"[" (expression (COMMA expression)*)? "]"
|
"[" (expression (COMMA expression)*)? "]"
|
||||||
|
|
@ -81,6 +93,43 @@ Future {
|
||||||
Column {
|
Column {
|
||||||
identifier
|
identifier
|
||||||
}
|
}
|
||||||
|
Field {
|
||||||
|
expression ("as" identifier)? |
|
||||||
|
"*"
|
||||||
|
}
|
||||||
|
BinaryExpression {
|
||||||
|
expression !and ("&&" | "AND") expression |
|
||||||
|
expression !or ("||" | "OR") expression |
|
||||||
|
expression !comparison (
|
||||||
|
"??" | "?:" |
|
||||||
|
"=" | "IS" |
|
||||||
|
"!=" | "IS NOT"|
|
||||||
|
"==" |
|
||||||
|
"?=" | "*=" |
|
||||||
|
"~" | "!~" | "?~" | "*~" |
|
||||||
|
"IN" | "NOT IN" |
|
||||||
|
"CONTAINS" | "∋" |
|
||||||
|
"CONTAINSNOT" | "∌" |
|
||||||
|
"CONTAINSALL" | "⊇" |
|
||||||
|
"CONTAINSANY" | "⊃" |
|
||||||
|
"CONTAINSNONE" | "⊅" |
|
||||||
|
"INSIDE" | "∈" |
|
||||||
|
"NOTINSIDE" | "NOT IN" | "∉" |
|
||||||
|
"ALLINSIDE" | "⊆" |
|
||||||
|
"ANYINSIDE" | "⊂" |
|
||||||
|
"NONEINSIDE" | "⊄" |
|
||||||
|
"OUTSIDE" |
|
||||||
|
"INTERSECTS" |
|
||||||
|
"@@" | "@" identifier "@" |
|
||||||
|
"<" | ">" | "<=" | ">="
|
||||||
|
) expression |
|
||||||
|
expression !exp Raise expression |
|
||||||
|
expression !times (Divide | Multiply) expression |
|
||||||
|
expression !plus (Add | Subtract) expression |
|
||||||
|
expression !dot (".*" | ("." "*."*) expression) |
|
||||||
|
expression? !dot "->" expression |
|
||||||
|
expression !array ("[" expression "]")
|
||||||
|
}
|
||||||
|
|
||||||
ReturnStatement {
|
ReturnStatement {
|
||||||
kw<"return"> expression
|
kw<"return"> expression
|
||||||
|
|
@ -94,10 +143,67 @@ BreakStatement {
|
||||||
CancelStatement {
|
CancelStatement {
|
||||||
kw<"cancel"> kw<"transaction">?
|
kw<"cancel"> kw<"transaction">?
|
||||||
}
|
}
|
||||||
|
CommitStatement {
|
||||||
|
kw<"commit"> kw<"transaction">?
|
||||||
|
}
|
||||||
|
ContinueStatement {
|
||||||
|
kw<"continue">
|
||||||
|
}
|
||||||
|
UseStatement {
|
||||||
|
kw<"use">
|
||||||
|
(kw<"ns"> identifier)?
|
||||||
|
(kw<"db"> identifier)?
|
||||||
|
}
|
||||||
|
ThrowStatement {
|
||||||
|
kw<"throw"> expression
|
||||||
|
}
|
||||||
|
SleepStatement {
|
||||||
|
kw<"sleep"> expression
|
||||||
|
}
|
||||||
|
ShowStatement {
|
||||||
|
kw<"show"> ckw<"changes"> kw<"for"> kw<"table">
|
||||||
|
expression
|
||||||
|
("since" expression)?
|
||||||
|
("limit" expression)?
|
||||||
|
}
|
||||||
|
LetStatement {
|
||||||
|
kw<"let"> Variable "=" (expression | statement)
|
||||||
|
}
|
||||||
|
InfoStatement {
|
||||||
|
kw<"info"> kw<"for">
|
||||||
|
(
|
||||||
|
kw<"root"> |
|
||||||
|
kw<"ns"> | kw<"namespace"> |
|
||||||
|
kw<"db"> | kw<"database"> |
|
||||||
|
kw<"scope"> expression |
|
||||||
|
kw<"table"> expression
|
||||||
|
)
|
||||||
|
}
|
||||||
|
orderBy {
|
||||||
|
expression (kw<"collate"> | kw<"numeric">)? (kw<"asc"> | kw<"desc">)?
|
||||||
|
}
|
||||||
|
SelectStatement {
|
||||||
|
kw<"select">
|
||||||
|
kw<"value">?
|
||||||
|
(Field (COMMA Field)*)
|
||||||
|
("omit" Field (COMMA Field)*)?
|
||||||
|
"from" kw<"only">? expression (COMMA expression)*
|
||||||
|
("with" (kw<"noindex"> | kw<"index"> identifier (COMMA identifier)))?
|
||||||
|
("where" expression)?
|
||||||
|
("split" kw<"at">? expression)?
|
||||||
|
// ("group" kw<"by">? expression (COMMA expression)*)?
|
||||||
|
// ("order" kw<"by">? orderBy (COMMA orderBy)*)?
|
||||||
|
// ("limit" kw<"by">? expression)?
|
||||||
|
// ("start" kw<"at">? expression)?
|
||||||
|
("timeout" expression)?
|
||||||
|
"parallel"?
|
||||||
|
("explain" kw<"full">?)?
|
||||||
|
}
|
||||||
|
|
||||||
expression[@isGroup=Expression] {
|
expression {
|
||||||
String |
|
String |
|
||||||
number |
|
number |
|
||||||
|
Duration |
|
||||||
Array |
|
Array |
|
||||||
Object |
|
Object |
|
||||||
FunctionCall |
|
FunctionCall |
|
||||||
|
|
@ -105,13 +211,28 @@ expression[@isGroup=Expression] {
|
||||||
Variable |
|
Variable |
|
||||||
Cast |
|
Cast |
|
||||||
RecordID |
|
RecordID |
|
||||||
Column
|
Column |
|
||||||
|
ParenthesizedExpression |
|
||||||
|
BinaryExpression
|
||||||
}
|
}
|
||||||
|
ParenthesizedExpression {
|
||||||
|
"(" (expression | statement) ")"
|
||||||
|
}
|
||||||
|
|
||||||
statement[@isGroup=Statement] {
|
statement[@isGroup=Statement] {
|
||||||
ReturnStatement |
|
ReturnStatement |
|
||||||
BeginStatement |
|
BeginStatement |
|
||||||
BreakStatement |
|
BreakStatement |
|
||||||
CancelStatement
|
CancelStatement |
|
||||||
|
CommitStatement |
|
||||||
|
ContinueStatement |
|
||||||
|
UseStatement |
|
||||||
|
ThrowStatement |
|
||||||
|
SleepStatement |
|
||||||
|
ShowStatement |
|
||||||
|
LetStatement |
|
||||||
|
InfoStatement |
|
||||||
|
SelectStatement
|
||||||
}
|
}
|
||||||
|
|
||||||
@local tokens {
|
@local tokens {
|
||||||
|
|
@ -129,6 +250,7 @@ statement[@isGroup=Statement] {
|
||||||
int { @digit+ }
|
int { @digit+ }
|
||||||
|
|
||||||
identifier { $[a-zA-Z] $[a-zA-Z0-9_]* }
|
identifier { $[a-zA-Z] $[a-zA-Z0-9_]* }
|
||||||
|
columnIdentifier { identifier | "*" }
|
||||||
|
|
||||||
RIDDelim { "`" }
|
RIDDelim { "`" }
|
||||||
RIDStart { "⟨" }
|
RIDStart { "⟨" }
|
||||||
|
|
@ -136,27 +258,30 @@ statement[@isGroup=Statement] {
|
||||||
RIDDelimContent { $[^`]+ }
|
RIDDelimContent { $[^`]+ }
|
||||||
RIDContent { $[^⟨⟩]+ }
|
RIDContent { $[^⟨⟩]+ }
|
||||||
|
|
||||||
Divide { "/" }
|
Divide { "/" | "÷" }
|
||||||
Multiply { "*" }
|
Multiply { "*" | "×" }
|
||||||
Add { "+" }
|
Add { "+" }
|
||||||
Subtract { "-" }
|
Subtract { "-" }
|
||||||
LessThan { "<" }
|
Raise { "**" }
|
||||||
GreaterThan { ">" }
|
|
||||||
|
|
||||||
Escape {
|
Escape {
|
||||||
"\\" ("x" hex hex | "u" ("{" hex+ "}" | hex hex hex hex) | ![xu])
|
"\\" ("x" hex hex | "u" ("{" hex+ "}" | hex hex hex hex) | ![xu])
|
||||||
}
|
}
|
||||||
hex { @digit | $[a-fA-F] }
|
hex { @digit | $[a-fA-F] }
|
||||||
stringContentSingle { ![\\\n']+ }
|
stringContentSingle { ![\\']+ }
|
||||||
stringContentDouble { ![\\\n"]+ }
|
stringContentDouble { ![\\"]+ }
|
||||||
|
|
||||||
EQ { "=" }
|
|
||||||
COMMA { "," }
|
COMMA { "," }
|
||||||
SEMI { ";" }
|
SEMI { ";" }
|
||||||
|
|
||||||
|
"/*"
|
||||||
"(" ")" "[" "]" "{" "}"
|
"(" ")" "[" "]" "{" "}"
|
||||||
|
|
||||||
"."
|
"."
|
||||||
|
"->"
|
||||||
|
|
||||||
|
@precedence { "/*", LineComment, Divide }
|
||||||
|
@precedence { LineComment, Subtract }
|
||||||
}
|
}
|
||||||
|
|
||||||
@detectDelim
|
@detectDelim
|
||||||
Loading…
Reference in a new issue