本文整理汇总了C#中Antlr3.Tool.GrammarAST.AddChild方法的典型用法代码示例。如果您正苦于以下问题:C# GrammarAST.AddChild方法的具体用法?C# GrammarAST.AddChild怎么用?C# GrammarAST.AddChild使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Antlr3.Tool.GrammarAST
的用法示例。
在下文中一共展示了GrammarAST.AddChild方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddRule
public void AddRule(GrammarAST grammarTree, GrammarAST t)
{
GrammarAST p = null;
for (int i = 0; i < grammarTree.ChildCount; i++)
{
p = (GrammarAST)grammarTree.GetChild(i);
if (p == null || p.Type == ANTLRParser.RULE || p.Type == ANTLRParser.PREC_RULE)
break;
}
if (p != null)
grammarTree.AddChild(t);
}
示例2: ParseAndBuildAST
public virtual void ParseAndBuildAST( TextReader r )
{
// BUILD AST FROM GRAMMAR
ANTLRLexer lexer = new ANTLRLexer( new Antlr.Runtime.ANTLRReaderStream( r ) );
lexer.Filename = this.FileName;
// use the rewrite engine because we want to buffer up all tokens
// in case they have a merged lexer/parser, send lexer rules to
// new grammar.
//lexer.setTokenObjectClass( "antlr.TokenWithIndex" );
tokenBuffer = new Antlr.Runtime.CommonTokenStream( lexer );
//tokenBuffer = new TokenStreamRewriteEngine( lexer );
//tokenBuffer.Discard( ANTLRParser.WS, ANTLRParser.ML_COMMENT, ANTLRParser.COMMENT, ANTLRParser.SL_COMMENT );
//tokenBuffer.discard( ANTLRParser.WS );
//tokenBuffer.discard( ANTLRParser.ML_COMMENT );
//tokenBuffer.discard( ANTLRParser.COMMENT );
//tokenBuffer.discard( ANTLRParser.SL_COMMENT );
ANTLRParser parser = new ANTLRParser( tokenBuffer );
parser.FileName = this.FileName;
ANTLRParser.grammar__return result = null;
try
{
result = parser.grammar_( this );
}
//catch ( TokenStreamException tse )
//{
// ErrorManager.internalError( "unexpected stream error from parsing " + fileName, tse );
//}
catch ( RecognitionException re )
{
ErrorManager.InternalError( "unexpected parser recognition error from " + fileName, re );
}
DealWithTreeFilterMode(); // tree grammar and filter=true?
if ( lexer.hasASTOperator && !BuildAST )
{
object value = GetOption( "output" );
if ( value == null )
{
ErrorManager.GrammarWarning( ErrorManager.MSG_REWRITE_OR_OP_WITH_NO_OUTPUT_OPTION,
this, null );
SetOption( "output", "AST", null );
}
else
{
ErrorManager.GrammarError( ErrorManager.MSG_AST_OP_WITH_NON_AST_OUTPUT_OPTION,
this, null, value );
}
}
//grammarTree = (GrammarAST)parser.getAST();
grammarTree = (GrammarAST)result.tree;
FileName = lexer.Filename; // the lexer #src might change name
if ( grammarTree == null || grammarTree.FindFirstType( ANTLRParser.RULE ) == null )
{
ErrorManager.Error( ErrorManager.MSG_NO_RULES, FileName );
return;
}
// Get syn pred rules and add to existing tree
IList<GrammarAST> synpredRules =
GetArtificialRulesForSyntacticPredicates( parser,
nameToSynpredASTMap );
for ( int i = 0; i < synpredRules.Count; i++ )
{
GrammarAST rAST = (GrammarAST)synpredRules[i];
grammarTree.AddChild( rAST );
}
}