MCPcopy Create free account
hub / github.com/crossoverJie/gscript / AssignmentStatement

Function AssignmentStatement

syntax/parse.go:84–121  ·  view source on GitHub ↗

AssignmentStatement -> Identifier = Additive parse: a = 10*2,

(reader *TokenReader)

Source from the content-addressed store, hash-verified

82
83// AssignmentStatement -> Identifier = Additive parse: a = 10*2,
84func AssignmentStatement(reader *TokenReader) (*ASTNode, error) {
85 var node *ASTNode
86 tokenType := reader.Peek()
87 if tokenType == nil {
88 return nil, errors.New("syntax err: invalid AssignmentStatement")
89 }
90
91 if tokenType.TokenType() == token.Identifier {
92 tokenType = reader.Read()
93 node = NewASTNode(AssignmentStmt, tokenType.Value())
94
95 tokenType = reader.Peek()
96 if tokenType == nil {
97 return nil, errors.New("syntax err: invalid AssignmentStatement")
98 }
99
100 if tokenType.TokenType() == token.Assignment {
101 tokenType = reader.Read()
102
103 child1, err := AdditiveLoop(reader)
104 if err != nil {
105 return nil, err
106 }
107 node.AddChild(child1)
108
109 // parse end
110 tokenType = reader.Peek()
111 if tokenType == nil || tokenType.TokenType() != token.Enter {
112 return nil, errors.New("syntax err: invalid statement, miss enter")
113 }
114 tokenType = reader.Read()
115
116 } else {
117 reader.UnRead()
118 }
119 }
120 return node, nil
121}
122
123// EvaluateWithRuntime deep recursion loop AST
124func EvaluateWithRuntime(node *ASTNode, indent string) interface{} {

Callers 1

ParseFunction · 0.85

Calls 8

AddChildMethod · 0.95
NewASTNodeFunction · 0.85
AdditiveLoopFunction · 0.85
TokenTypeMethod · 0.80
ReadMethod · 0.80
ValueMethod · 0.80
UnReadMethod · 0.80
PeekMethod · 0.45

Tested by

no test coverage detected