⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parsetreebuilder.cs

📁 antlr小例子 。
💻 CS
字号:
using System;
using System.Collections;
using Antlr.Runtime;
using Antlr.Runtime.Debug;
using Antlr.Runtime.Tree;

namespace Antlr.Runtime.Debug
{
	/// <summary>This parser listener tracks rule entry/exit and token 
	/// matches to build a simple parse tree using ParseTree nodes.</summary>
	/// <remarks>This class will be added to ANTLR probably in 3.0b6.</remarks>
	public class ParseTreeBuilder: BlankDebugEventListener 
	{
		Stack callStack = new Stack();

		public ParseTreeBuilder(String grammarName) 
		{
			ParseTree root = Create("<grammar "+grammarName+">");
			callStack.Push(root);
		}

		public ParseTree GetTree() 
		{
			IEnumerator enumerator = callStack.GetEnumerator();
			enumerator.MoveNext();
			return (ParseTree)enumerator.Current;
		}

		/// <summary>What kind of node to create.  You might want to override so I factored out creation here.</summary>
		/// <param name="payload"></param>
		/// <returns></returns>
		public ParseTree Create(Object payload) 
		{
			return new ParseTree(payload);
		}

		public override void EnterRule(String ruleName) 
		{
			ParseTree parentRuleNode = (ParseTree)callStack.Peek();
			ParseTree ruleNode = Create(ruleName);
			parentRuleNode.AddChild(ruleNode);
			callStack.Push(ruleNode);
		}

		public override void ExitRule(String ruleName) 
		{
			callStack.Pop();
		}

		public override void ConsumeToken(IToken token)
		{
			ParseTree ruleNode = (ParseTree)callStack.Peek();
			ParseTree elementNode = Create(token);
			ruleNode.AddChild(elementNode);
		}

		public override void RecognitionException(RecognitionException e) 
		{
			ParseTree ruleNode = (ParseTree)callStack.Peek();
			ParseTree errorNode = Create(e);
			ruleNode.AddChild(errorNode);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -