private void TraverseFunctionDeclaration(Reduction functionDeclaration)
{
var returnType = (string)((Reduction)functionDeclaration[0].Data)[0].Data;
var name = (string)functionDeclaration[1].Data;
var parameterDeclarations = (Reduction)functionDeclaration[3].Data;
var optionalSemantic = (Reduction)functionDeclaration[5].Data;
var statements = functionDeclaration.Count() >= 9 ? (Reduction)functionDeclaration[7].Data : null;
this.Functions.Add(
new LogicFunction
{
Name = name,
ReturnSemantic = this.ParseOptionalSemantic(optionalSemantic),
ReturnType = returnType,
Parameters = this.ParseParameters(parameterDeclarations),
Statements = statements == null ? new List<LogicStatement>() : this.ParseStatements(statements)
});
}