Browse Source

пустышки для IF THEN ELSE и операция EQUAL, добавлено демо4

kpmy 10 năm trước cách đây
mục cha
commit
d3236d9558

+ 2 - 0
cp/constant/nodeclass.go

@@ -13,4 +13,6 @@ const (
 	PARAMETER
 	RETURN
 	MONADIC
+	CONDITIONAL
+	IF
 )

+ 1 - 0
cp/constant/operation/operation.go

@@ -5,4 +5,5 @@ type Operation int
 const (
 	PLUS Operation = iota
 	CONVERT
+	EQUAL
 )

+ 20 - 0
cp/node/class.go

@@ -72,6 +72,14 @@ type MonadicNode interface {
 	self() MonadicNode
 }
 
+type ConditionalNode interface {
+	self() ConditionalNode
+}
+
+type IfNode interface {
+	self() IfNode
+}
+
 type enterNode struct {
 	nodeFields
 	enter enter.Enter
@@ -160,3 +168,15 @@ func (v *monadicNode) Operation() operation.Operation { return v.operation }
 
 func (v *monadicNode) SetType(t object.Type) { v.typ = t }
 func (v *monadicNode) Type() object.Type     { return v.typ }
+
+type conditionalNode struct {
+	nodeFields
+}
+
+func (v *conditionalNode) self() ConditionalNode { return v }
+
+type ifNode struct {
+	nodeFields
+}
+
+func (v *ifNode) self() IfNode { return v }

+ 4 - 0
cp/node/node.go

@@ -39,6 +39,10 @@ func New(class constant.Class) Node {
 		return new(returnNode)
 	case constant.MONADIC:
 		return new(monadicNode)
+	case constant.CONDITIONAL:
+		return new(conditionalNode)
+	case constant.IF:
+		return new(ifNode)
 	default:
 		panic("no such class")
 	}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
fw/XevDemo1.oxf


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
fw/XevDemo2.oxf


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
fw/XevDemo3.oxf


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
fw/XevDemo4.oxf


+ 2 - 2
fw/fw.go

@@ -15,12 +15,12 @@ func main() {
 	global := new(stdDomain)
 	modList := module.New()
 	global.ConnectTo(context.MOD, modList)
-	ret, err := modList.Load("XevDemo3")
+	ret, err := modList.Load("XevDemo4")
 	assert.For(ret != nil, 40)
 	assert.For(err == nil, 41)
 	{
 		domain := new(stdDomain)
-		global.ConnectTo("XevDemo3", domain)
+		global.ConnectTo("XevDemo4", domain)
 		root := frame.NewRoot()
 		domain.ConnectTo(context.STACK, root)
 		domain.ConnectTo(context.SCOPE, scope.New())

+ 9 - 0
rt2/rules/if.go

@@ -0,0 +1,9 @@
+package rules
+
+import (
+	"rt2/frame"
+)
+
+func ifSeq(f frame.Frame) (frame.Sequence, frame.WAIT) {
+	return frame.End()
+}

+ 4 - 12
rt2/rules/table.go

@@ -32,6 +32,8 @@ func prologue(n node.Node) frame.Sequence {
 		return callSeq
 	case node.ReturnNode:
 		return returnSeq
+	case node.ConditionalNode:
+		return ifSeq
 	default:
 		panic(fmt.Sprintln("unknown node", reflect.TypeOf(n)))
 	}
@@ -40,7 +42,7 @@ func prologue(n node.Node) frame.Sequence {
 func epilogue(n node.Node) frame.Sequence {
 	var fu nodeframe.FrameUtils
 	switch n.(type) {
-	case node.AssignNode:
+	case node.AssignNode, node.CallNode, node.ConditionalNode:
 		return func(f frame.Frame) (frame.Sequence, frame.WAIT) {
 			next := n.Link()
 			if next != nil {
@@ -54,17 +56,7 @@ func epilogue(n node.Node) frame.Sequence {
 			sm.Dispose(n)
 			return frame.End()
 		}
-	case node.OperationNode:
-		return nil //do nothing
-	case node.CallNode:
-		return func(f frame.Frame) (frame.Sequence, frame.WAIT) {
-			next := n.Link()
-			if next != nil {
-				f.Root().PushFor(fu.New(next), f.Parent())
-			}
-			return frame.End()
-		}
-	case node.ReturnNode:
+	case node.OperationNode, node.ReturnNode:
 		return nil
 	default:
 		fmt.Println(reflect.TypeOf(n))

+ 6 - 0
xev/converter.go

@@ -223,6 +223,8 @@ func (r *Result) buildNode(n *Node) (ret node.Node) {
 			switch n.Data.Nod.Operation {
 			case "plus":
 				ret.(node.OperationNode).SetOperation(operation.PLUS)
+			case "equal":
+				ret.(node.OperationNode).SetOperation(operation.EQUAL)
 			default:
 				panic("no such operation")
 			}
@@ -255,6 +257,10 @@ func (r *Result) buildNode(n *Node) (ret node.Node) {
 			default:
 				panic("no such operation")
 			}
+		case "conditional":
+			ret = node.New(constant.CONDITIONAL)
+		case "if":
+			ret = node.New(constant.IF)
 		default:
 			fmt.Println(n.Data.Nod.Class)
 			panic("no such node type")

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác