Drafting ProductStatement
This commit is contained in:
@@ -18,10 +18,11 @@ THEN OPT EXPECT: FOR EVERY
|
||||
THEN EXPECT: [SOLD|BOUGHT] FROM [ExchangeType]
|
||||
*/
|
||||
|
||||
func BuyStatement( lexer *engine.Lexer ) ( stmtd.IStatement, error ) {
|
||||
func BuyStatement( lexer *engine.Lexer ) ( istmt stmtd.IStatement, err error ) {
|
||||
orderStmt := stmtd.OrderStatement{}
|
||||
orderStmt.Action = "BUY"
|
||||
|
||||
// AmountStatement
|
||||
readAmount := engine.LexerExpect{
|
||||
Statements: true,
|
||||
Keywords: false,
|
||||
@@ -32,10 +33,30 @@ func BuyStatement( lexer *engine.Lexer ) ( stmtd.IStatement, error ) {
|
||||
|
||||
amountStmt, err := lexer.ReadStatement( &readAmount )
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return
|
||||
}
|
||||
orderStmt.For( amountStmt )
|
||||
|
||||
var istmt stmtd.IStatement = orderStmt
|
||||
return istmt, err
|
||||
// OF
|
||||
err = lexer.ReadKeyword( "OF" )
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// ProductStatement
|
||||
readProduct := engine.LexerExpect{
|
||||
Statements: true,
|
||||
Keywords: false,
|
||||
Brackets: false,
|
||||
Quotes: false,
|
||||
Key: "PRODUCT",
|
||||
}
|
||||
productStmt, err := lexer.ReadStatement( &readProduct )
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
orderStmt.Product( productStmt )
|
||||
|
||||
istmt = orderStmt
|
||||
return
|
||||
}
|
||||
|
@@ -12,6 +12,7 @@ func TestBuyStatement( t *testing.T ) {
|
||||
supportedStmts := map[string] func( *engine.Lexer ) ( stmtd.IStatement, error ) {
|
||||
"BUY": BuyStatement,
|
||||
"AMOUNT": AmountStatement,
|
||||
"PRODUCT": ProductStatement,
|
||||
}
|
||||
lexer.SupportedStmts = &supportedStmts
|
||||
|
||||
|
26
mmql/statements/actions/product.go
Normal file
26
mmql/statements/actions/product.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package actions
|
||||
|
||||
import (
|
||||
// "fmt"
|
||||
engine "github.com/tgckpg/mmqlengine/mmql/engine"
|
||||
stmtd "github.com/tgckpg/mmqlengine/mmql/statements"
|
||||
)
|
||||
|
||||
/*
|
||||
EXPECT: [NAME]
|
||||
OR
|
||||
EXPECT: [FUNCTION]( ...params )
|
||||
*/
|
||||
|
||||
func ProductStatement( lexer *engine.Lexer ) ( istmt stmtd.IStatement, err error ) {
|
||||
stmt := stmtd.ProductStatement{}
|
||||
|
||||
name, err := lexer.ReadAlpha()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
stmt.Name = name
|
||||
|
||||
istmt = stmt
|
||||
return
|
||||
}
|
@@ -25,8 +25,16 @@ type AmountStatement struct {
|
||||
Unit string
|
||||
}
|
||||
|
||||
type ProductStatement struct {
|
||||
IStatement
|
||||
Name string
|
||||
}
|
||||
|
||||
type IActionStatement interface { }
|
||||
|
||||
|
||||
|
||||
|
||||
type OrderStatement struct {
|
||||
IStatement
|
||||
IActionStatement
|
||||
@@ -35,3 +43,6 @@ type OrderStatement struct {
|
||||
|
||||
func ( this *OrderStatement ) For( stmt IStatement ) {
|
||||
}
|
||||
|
||||
func ( this *OrderStatement ) Product( stmt IStatement ) {
|
||||
}
|
||||
|
Reference in New Issue
Block a user