Tag: abstract syntax tree

行号的方法名称

给定特定类源代码(Java / C#)的行号 – 是否有一种简单的方法来获取它所属的方法的名称? (如果它在一个内)(推测使用抽象语法树) (这对于将checkstyle的输出限制为仅触及的方法非常有用)。 我假设您必须使用抽象语法树来执行Line# – > MethodName。

使用ANTLR构建自己的C#编译器:编译单元

//创建一个扫描程序,从传递给我们的输入流中读取CSLexer lexer = new CSLexer(new ANTLRFileStream(f)); tokens.TokenSource = lexer; // Create a parser that reads from the scanner CSParser parser = new CSParser(tokens); // start parsing at the compilationUnit rule CSParser.compilation_unit_return x = parser.compilation_unit(); object ast = x.Tree; 我怎么能用compilation_unit_return类型的x来提取它的根,它的类,它的方法等? 我必须提取其适配器吗? 我怎么做? 请注意,compilation_unit_return在我的CSParser中定义(由ANTLR自动生成): public class compilation_unit_return : ParserRuleReturnScope { private object tree; override public object Tree […]

开发抽象语法树

我在互联网上搜索了一些关于开发C#抽象语法树的新手信息,但我只能找到已经“知道”的人的信息。 我是一个业务线应用程序开发人员,所以这些主题有点过头,但这是我自己的教育,所以我愿意花时间学习任何必要的概念。 通常,我想了解从代码字符串开发代码的抽象表示背后的技术。 更具体地说,我希望能够使用此AST来执行C#语法高亮显示。 (我意识到语法突出显示不需要AST,但这似乎是学习一些“编译器”级技术的好机会。) 如果这个问题有点宽泛,我很抱歉,但我不确定该怎么回答。 谢谢!

Microsoft CCI – 资源,编写编译器的参考资料

前段时间,我正在研究编译器,我使用System.Reflection从我的AST生成代码(IL)。 现在,我已经想到了另一个我想要处理的编译器(它将是另一个宠物项目,没有任何将在生产代码中使用,至少,现在不是)。 如您所知,宠物项目比生产代码有一个很大的优势:您可以尝试并失败。 所以,我决定尝试使用微软的CCI编写编译器。 我发现的唯一好的参考是基本语言的示例编译器(这是CCI在codeplex上的一部分),但是,我更喜欢有一些其他资源,更像是教程,书籍,文章,我可以获得除了学习代码之外的更多信息(这并不总是最好的学习方法,因为你看到了一个解决方案,但你不知道你有什么替代品,或者为什么这样的代码有效)。 那么:在编写编译器和处理AST的背景下,你有关于CCI的任何资源(教程,书籍)吗?

将C#代码翻译成AST?

目前是否可以将C#代码转换为抽象语法树? 编辑:一些澄清; 我不一定希望编译器能为我生成AST – 解析器没问题,虽然我想使用“官方”的东西。 遗憾的是Lambda表达式不够,因为它们不允许我使用语句体,这正是我正在寻找的。

如何在C#中为抽象语法树编写访问者模式?

我必须写一个访问者模式来导航AST。 任何人都可以告诉我更多我将如何开始写它? 据我所知,AST中的每个节点都有visit()方法(?),它会以某种方式被调用(从哪里?)。 这总结了我的理解。 为了简化一切,假设我有节点Root,Expression,Number,Op,树看起来像这样: Root | Op(+) / \ / \ Number(5) \ Op(*) / \ / \ / \ Number(2) Number(444)