MCPcopy Create free account
hub / github.com/docopt/docopt.go / parseExpr

Function parseExpr

docopt.go:269–300  ·  view source on GitHub ↗
(tokens *tokenList, options *patternList)

Source from the content-addressed store, hash-verified

267}
268
269func parseExpr(tokens *tokenList, options *patternList) (patternList, error) {
270 // expr ::= seq ( '|' seq )* ;
271 seq, err := parseSeq(tokens, options)
272 if err != nil {
273 return nil, err
274 }
275 if !tokens.current().eq("|") {
276 return seq, nil
277 }
278 var result patternList
279 if len(seq) > 1 {
280 result = patternList{newRequired(seq...)}
281 } else {
282 result = seq
283 }
284 for tokens.current().eq("|") {
285 tokens.move()
286 seq, err = parseSeq(tokens, options)
287 if err != nil {
288 return nil, err
289 }
290 if len(seq) > 1 {
291 result = append(result, newRequired(seq...))
292 } else {
293 result = append(result, seq...)
294 }
295 }
296 if len(result) > 1 {
297 return patternList{newEither(result...)}, nil
298 }
299 return result, nil
300}
301
302func parseSeq(tokens *tokenList, options *patternList) (patternList, error) {
303 // seq ::= ( atom [ '...' ] )* ;

Callers 2

parsePatternFunction · 0.85
parseAtomFunction · 0.85

Calls 6

parseSeqFunction · 0.85
newRequiredFunction · 0.85
newEitherFunction · 0.85
currentMethod · 0.80
moveMethod · 0.80
eqMethod · 0.45

Tested by

no test coverage detected