我想使用讽刺生成和显示上下文无关语法,到目前为止,我可以通过以下代码编写上下文无关语法
public ExpressionGrammar()
{
//// 1. Terminals
Terminal number = new NumberLiteral("number");
Terminal identifier = new IdentifierTerminal("identifier");
//// 2. Non-terminals
NonTerminal Stmt = new NonTerminal("Stmt");
NonTerminal Dec = new NonTerminal("Dec");
NonTerminal Datattype = new NonTerminal("Datatype");
NonTerminal Def = new NonTerminal("Def");
NonTerminal Var = new NonTerminal("Var");
NonTerminal Const = new NonTerminal("Const");
this.Root = Stmt;
////3. BNF Rules
Stmt.Rule = "{"+Dec+"}";
Dec.Rule = Datattype + Def + ";";
Def.Rule = identifier | identifier + "=" + number;
//MarkPunctuation(""); ;
Datattype.Rule = ToTerm("int") | "char" | "float";
}
在我的form_load
事件中,我有
ExpressionGrammar ex = new ExpressionGrammar();
//Grammar grammar = new ExpressionGrammar();
Parser parser = new Parser(ex);
ParseTree parseTree = parser.Parse("{int a=5;}");
if (!parseTree.HasErrors())
{
//foreach (string p in parseTree.) { }
MessageBox.Show(parseTree.Status.ToString());
// ParseTreeNodeList ls = new ParseTreeNodeList();
//ls.Add(parseTree.Root);
}
else
{
MessageBox.Show("Error in parsing");
}
我得到了解析的消息,所以现在我想生成解析树。我该怎么做?