private void OnParsingProcessBtnClicked(object sender, EventArgs args)
		{
			syntacticalCoverModel.Clear();
			
			parsingTaskLabel.Markup="-";
			
			// We set the tokens from the previous step.
			controller.SetStartTokens(MainRecognizerWindow.TokenizingWidget.ResultTokens);
			
			// We set the rules library.
			SyntacticalRulesLibrary.Instance.ClearRules();
			
			List<SyntacticalRule> rules = 
				Config.RecognizerConfig.Instance.SyntacticalRules;
			
			foreach (SyntacticalRule rule in  rules) 
			{
				SyntacticalRulesLibrary.Instance.AddRule(rule);
			}
			
			SyntacticalRulesLibrary.Instance.StartRule = rules[0];
			
			parsingButtonsNB.Page = 1;
			
			currentNode = null;
			
			controller.Next(ControllerStepMode.StepByStep);
		}
		private void OnControllerMatching(object sender, 
		                                  MatchingArgs _args)
		{
			Application.Invoke(sender, 
			                   _args,
			                   delegate(object resender, EventArgs a)
			{
				MatchingArgs args = a as MatchingArgs;
				SyntacticalCoverNode newNode = 
					new SyntacticalCoverNode(args.Matcher,
					                         syntacticalCoverTree);
				
				if(currentNode == null)
				{
					syntacticalCoverModel.AddNode(newNode);
				}
				else
				{
					currentNode.Select();	
					currentNode.AddChild(newNode);
					syntacticalCoverTree.ExpandRow(syntacticalCoverTree.Selection.GetSelectedRows()[0],
					                               false);
					
				}				
				
				currentNode = newNode;			
				
				
				currentNode.Select();				
							
				
				parsingTaskLabel.Markup=
					String.Format("<b>Intentando encajar los elementos restantes con <i>{0}</i></b>",
					              GLib.Markup.EscapeText(currentNode.Matcher.Label));
				
				parsingNextButtonsAlign.Sensitive = 
					controller.StepMode == ControllerStepMode.StepByStep;
			});
		}
		private void OnControllerStepDone(object sender, 
		                                  EventArgs args)
		{
			Application.Invoke(delegate(object resender, EventArgs a)
			{
				
				if(currentNode.Parent !=null)
				{
					string currentLabel = currentNode.Matcher.Label;
					currentNode =  currentNode.Parent as SyntacticalCoverNode;	
					currentNode.Select();
					syntacticalCoverTree.CollapseRow(syntacticalCoverTree.Selection.GetSelectedRows()[0]);
					
					parsingTaskLabel.Markup=
					String.Format("<b>Volviendo al nodo padre de <i>{0}</i>, <i>{1}</i></b>",
						          GLib.Markup.EscapeText(currentLabel),
					              GLib.Markup.EscapeText(currentNode.Matcher.Label));
					
				}
				
				MarkImage(null);				
				
				
				if(controller.StepMode == ControllerStepMode.StepByStep)
				{
					parsingNextButtonsAlign.Sensitive = true;
				}
			});				
		}
 private void OnChildAdded(object sender, ITreeNode _child)
 {
     SyntacticalCoverNode child = (SyntacticalCoverNode)_child;
 }