0
내가 생성 및 디스플레이 문맥 자유 문법 아이러니를 사용하여 지금까지 나는이 코드를Irony를 사용하여 C#의 표현식에 대해 ParseTree를 생성하고 표시하는 방법은 무엇입니까?
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");
}
하고 싶어 이제 파싱 트리를 생성하고 싶습니다. 내가 어떻게 할 수 있니?
예 또한이 작업을 수행하고 있지만 창 형식으로 출력하고 싶습니다. 반복을 사용하여 메시지 상자에서 테스트하고 있습니다. 즉 루프를 사용하지만 첫 번째 노드 만 표시하는 이유는 무엇입니까? – user2549568
IronyGrammarExplorer 이미 그것을 않습니다. 그들이 어떻게하는지 관심이 있다면, 소스를 얻고 탐색하십시오. –