module FoodFishParser::Strict::Grammar

grammar FishName
  include Common
  include FishAllergen
  include FishNameLatin
  include FishNameNL

  rule fish_name_both
    ( !fish_allergen fish_name_nl ws* '(' ( ws* fish_allergen )? ws* fish_name_latin ( ws* ')' / comma )? )
  end

  rule fish_name_both_list
    ( fish_name_both <FishNameNode> )
    ( ws+ and_or ws+ fish_name_both <FishNameNode> )*
  end

  rule fish_name_latin_list
    ( fish_name_latin <FishNameNode> )
    ( ws+ and_or ws+ fish_name_latin <FishNameNode> )*
  end

  rule fish_name_nl_list
    ( !fish_allergen fish_name_nl <FishNameNode> )
    ( ws+ and_or ws+ !fish_allergen fish_name_nl <FishNameNode> )*
  end

  rule fish_name_any_list
    fish_name_both_list / fish_name_latin_list / fish_name_nl_list
  end
end

end