/// Spart License (zlib/png)
///
///
/// Copyright (c) 2003 Jonathan de Halleux
///
/// This software is provided 'as-is', without any express or implied warranty.
/// In no event will the authors be held liable for any damages arising from
/// the use of this software.
///
/// Permission is granted to anyone to use this software for any purpose,
/// including commercial applications, and to alter it and redistribute it
/// freely, subject to the following restrictions:
///
/// 1. The origin of this software must not be misrepresented; you must not
/// claim that you wrote the original software. If you use this software in a
/// product, an acknowledgment in the product documentation would be
/// appreciated but is not required.
///
/// 2. Altered source versions must be plainly marked as such, and must not be
/// misrepresented as being the original software.
///
/// 3. This notice may not be removed or altered from any source distribution.
///
/// Author: Jonathan de Halleuxnamespace Spart.Parsers.NonTerminal
namespace Spart.Parsers.NonTerminal
{
using System;
using Spart.Scanners;
///
/// NonTerminal parser abstract class
///
public abstract class NonTerminalParser : Parser
{
private String m_ID;
///
/// Default constructor
///
public NonTerminalParser()
:base()
{
ID = GetHashCode().ToString();
}
///
/// Rule ID, used for debugging
///
public string ID
{
get
{
return m_ID;
}
set
{
if( m_ID != value )
m_ID = value;
}
}
///
/// Pre parse event
///
public event PreParseEventHandler PreParse;
///
/// Post parse event
///
public event PostParseEventHandler PostParse;
///
/// Preparse event caller
///
///
public virtual void OnPreParse(IScanner scan)
{
if (PreParse != null)
PreParse(this, new PreParseEventArgs(this,scan) );
}
///
/// Post parse event caller
///
///
///
public virtual void OnPostParse(ParserMatch match, IScanner scan)
{
if (PostParse != null)
PostParse(this,new PostParseEventArgs(match,this,scan));
}
///
/// Adds event handlers
///
///
public void AddContext(IParserContext context)
{
PreParse+=new PreParseEventHandler(context.PreParse);
PostParse+=new PostParseEventHandler(context.PostParse);
}
///
/// Removes event handlers
///
///
public void RemoveContext(IParserContext context)
{
PreParse-=new PreParseEventHandler(context.PreParse);
PostParse-=new PostParseEventHandler(context.PostParse);
}
public override Parser Clone()
{
NonTerminalParser clone = base.Clone() as NonTerminalParser;
return clone;
}
}
}