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

Function AdditiveLoop

syntax/syntax.go:156–187  ·  view source on GitHub ↗

AdditiveLoop Additive -> Multiplicative ( (+ | -) Multiplicative)*

(tokenReader *TokenReader)

Source from the content-addressed store, hash-verified

154
155// AdditiveLoop Additive -> Multiplicative ( (+ | -) Multiplicative)*
156func AdditiveLoop(tokenReader *TokenReader) (*ASTNode, error) {
157 child1, err := MultiplicativeLoop(tokenReader)
158 node := child1
159 if err != nil {
160 return nil, err
161 }
162 for {
163 // add'
164 tokenType := tokenReader.Peek()
165 if tokenType != nil && (tokenType.TokenType() == token.Plus || tokenType.TokenType() == token.Minus) {
166 tokenType = tokenReader.Read()
167
168 child2, err := MultiplicativeLoop(tokenReader)
169 if err != nil {
170 return nil, err
171 }
172 node = NewASTNode(AdditiveType, tokenType.Value())
173 node.AddChild(child1)
174 node.AddChild(child2)
175 child1 = node
176 } else {
177 break
178 }
179 }
180
181 if node != nil {
182 return node, nil
183 } else {
184 return nil, errors.New("syntax err, invalid additive")
185 }
186
187}
188
189// MultiplicativeLoop Multiplicative -> Primary ((* | /) Primary)*
190func MultiplicativeLoop(tokenReader *TokenReader) (*ASTNode, error) {

Callers 4

IntDeclareFunction · 0.85
PrimaryFunction · 0.85
ExpressionStatementFunction · 0.85
AssignmentStatementFunction · 0.85

Calls 7

MultiplicativeLoopFunction · 0.85
NewASTNodeFunction · 0.85
TokenTypeMethod · 0.80
ReadMethod · 0.80
ValueMethod · 0.80
AddChildMethod · 0.80
PeekMethod · 0.45

Tested by

no test coverage detected