func()

in src/ct/studies/study.go [55:111]


func (s *Study) Parse() *Study {
	interpreter := parser.Get()

	inclusions, exclusions := s.Criteria()
	s.criteriaCnt = len(inclusions) + len(exclusions)

	// Parse inclusion criteria:
	inclusionCriteria := criteria.NewCriteria()
	for _, inclusion := range inclusions {
		lowercase := strings.ToLower(inclusion)
		orRelations, andRelations := interpreter.Interpret(lowercase)

		orRelations.Process()
		andRelations.Process()

		if !orRelations.Empty() {
			criterion := criteria.NewCriterion(inclusion, orRelations.MinScore(), orRelations)
			inclusionCriteria = append(inclusionCriteria, criterion)
		}
		if !andRelations.Empty() {
			for _, r := range andRelations {
				rs := relation.Relations{r}
				criterion := criteria.NewCriterion(inclusion, rs.MinScore(), rs)
				inclusionCriteria = append(inclusionCriteria, criterion)
			}
		}
	}
	s.inclusionCriteria = inclusionCriteria

	// Parse exclusion criteria:
	exclusionCriteria := criteria.NewCriteria()
	for _, exclusion := range exclusions {
		lowercase := strings.ToLower(exclusion)
		orRelations, andRelations := interpreter.Interpret(lowercase)
		orRelations.Process()
		andRelations.Process()
		orRelations.Negate()
		andRelations.Negate()

		if !andRelations.Empty() {
			criterion := criteria.NewCriterion(exclusion, andRelations.MinScore(), andRelations)
			exclusionCriteria = append(exclusionCriteria, criterion)
		}
		if !orRelations.Empty() {
			for _, r := range orRelations {
				rs := relation.Relations{r}
				criterion := criteria.NewCriterion(exclusion, rs.MinScore(), rs)
				exclusionCriteria = append(exclusionCriteria, criterion)
			}
		}
	}

	s.exclusionCriteria = exclusionCriteria
	s.Transform()

	return s
}