有没有一种几乎开箱即用的方法?
我可以写一个很大的方法,使用收集的标记来确定哪些叶子应该放在哪些分支中,最后填充一个TreeNode对象,但是由于gppg已经使用提供的正则表达式处理了所有的事情,我想知道是否有更简单的方法?即使不是这样,任何关于如何最好地处理创建AST的问题的建议都将不胜感激。
如果我说了什么傻话,很抱歉,我才刚刚开始玩编译器游戏。:)
发布于 2008-11-14 17:04:55
参见MGrammar和Oslo...
http://msdn.microsoft.com/oslo
http://channel9.msdn.com/pdc2008/TL31/
发布于 2010-05-06 08:39:22
AST
{% public BatchNode Batch;public ErrorHandler yyhldr;private TransformationContext _txContext = TransformationContext.Instance;%}
批处理: StatementList {Batch =新BatchNode($1.Statements);};StatementList :语句{$$.Statements =新列表();$$.Statements.Add($1.Statement);}| StatementList语句{$$.Statements = $1.Statements;$$.Statements.Add($2.Statement);};
var解析器=新的结果();var Parser.Parser=新的扫描器();parser.scanner =扫描器;scanner.SetSource(sourceString,0);布尔结果= parser.Parse();if (结果) HandleMyAst(parser.Batch)
发布于 2008-11-14 18:04:45
看看ANTLR,几年前我用C#编写了一个简单的.NET编译器。
https://stackoverflow.com/questions/290709
复制相似问题