module FoodIngredientParser::Strict::Grammar
grammar IngredientNested include Common include Amount include IngredientSimple rule ingredient_nested ( ing:ingredient_simple (ws* ':')? ws* '(' contains:ingredient_nested_in ws* ')' ws? mark:mark ws* amount:amount <NestedIngredientNode> ) / ( ing:ingredient_simple (ws* ':')? ws* '(' contains:ingredient_nested_in ws* ')' ws* amount:amount <NestedIngredientNode> ) / ( ing:ingredient_simple_with_amount (ws* ':')? ws* '(' contains:ingredient_nested_in ws* ')' ws? mark:mark <NestedIngredientNode> ) / ( ing:ingredient_simple_with_amount (ws* ':')? ws* '(' contains:ingredient_nested_in ws* ')' <NestedIngredientNode> ) / ( ing:ingredient_simple (ws* ':')? ws* '[' contains:ingredient_nested_in ws* ']' ws? mark:mark ws* amount:amount <NestedIngredientNode> ) / ( ing:ingredient_simple (ws* ':')? ws* '[' contains:ingredient_nested_in ws* ']' ws* amount:amount <NestedIngredientNode> ) / ( ing:ingredient_simple_with_amount (ws* ':')? ws* '[' contains:ingredient_nested_in ws* ']' ws? mark:mark <NestedIngredientNode> ) / ( ing:ingredient_simple_with_amount (ws* ':')? ws* '[' contains:ingredient_nested_in ws* ']' <NestedIngredientNode> ) end rule ingredient_nested_in ( ingredient_nested_contains (ws* ':')? ws+ )? ws* contains:list ws* '.'? end rule ingredient_nested_contains 'contains'i / 'bevat'i / 'bevat o.a.'i / 'o.a.'i / 'met'i end end
end