/**************************************************************************** ** ** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt VS Tools. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ using System; using System.Collections.Generic; using System.Text; namespace QtVsTools.SyntaxAnalysis { //////////////////////////////////////////////////////////////////////////////////////////////// /// /// RegExpr /// //////////////////////////////////////////////////////////////////////////////////////////////// /// /// Abstract representation of a regular expression. /// /// /// RegExpr objects can be created and combined using C# expressions, and then rendered into a /// regular expression pattern and parser. /// public abstract partial class RegExpr { /// /// Render the RegExpr into a corresponding pattern and parser. /// /// Default token whitespace /// /// object that can process strings according to the pattern rendered. /// public Parser Render(RegExpr defaultTokenWs = null) { return new Parser(this, defaultTokenWs); } [Flags] protected enum RenderMode { Default = 0, Assert = 1 } /// /// Event triggered when starting the rendering process for this RegExpr. /// /// Default token whitespace /// Parent expression /// Rendered pattern /// Rendering mode /// /// Sub-expressions to add to the rendering process. /// /// RegExpr sub-classes will re-implement OnRenderBegin, OnRenderNext and OnRenderEnd to /// define their specific rendering process. Regular expression strings are appended to /// . When rendering a named capture group, a mapping to a /// production object can be defined and added to . The production /// object will be responsible for translating the captured values into instances of /// external, application specific classes. /// protected virtual IEnumerable OnRender(RegExpr defaultTokenWs, RegExpr parent, StringBuilder pattern, ref RenderMode mode, Stack tokenStack) { return null; } /// /// Event triggered when rendering the next sub-expression. /// /// Default token whitespace /// Parent expression /// Rendered pattern /// Rendering mode /// protected virtual void OnRenderNext(RegExpr defaultTokenWs, RegExpr parent, StringBuilder pattern, ref RenderMode mode, Stack tokenStack) { } /// /// Event triggered after all sub-expressions have been rendered. /// /// Default token whitespace /// Parent expression /// Rendered pattern /// Rendering mode /// protected virtual void OnRenderEnd(RegExpr defaultTokenWs, RegExpr parent, StringBuilder pattern, ref RenderMode mode, Stack tokenStack) { } public class RegExprException : System.Exception { public RegExprException(string message = null) : base(message) { } } } }