栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C#中运行ANTLR AST的教程?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在C#中运行ANTLR AST的教程?

通过修改Manuel
Abadia文章
结尾的示例,我设法弄清了这一点。

这是我的版本,我刚好用它来将解析的代码转换为C#。这些步骤是:

  1. 使用您的输入实例化ANTLRStringStream或子类(它可以是文件或字符串)。
  2. 实例化生成的词法分析器,并传入该字符串流。
  3. 使用词法分析器实例化令牌流。
  4. 使用该令牌流实例化解析器。
  5. 从解析器获取顶级值,然后将其转换为
    CommonTree
  6. 遍历树:

要获取节点的文字文本,请使用

node.Text
。要获取节点的令牌名称,请使用
node.Token.Text

请注意,

node.Token.Text
如果它是一个虚构的令牌,没有相应的字符串,则只会为您提供令牌的实际名称。如果它是真实的令牌,
node.Token.Text
则将返回其字符串。

例如,如果语法中包含以下内容:

tokens { PROGRAM, FUNCDEC }EQUALS : '==';ASSIGN : '=';

然后你会得到

"PROGRAM"
"FUNCDEC"
"=="
,并
"="
从相应的访问
node.Token.Text

您可以在下面查看我的示例的一部分,也可以浏览完整版本。


public static string Convert(string input){    ANTLRStringStream sStream = new ANTLRStringStream(input);    MyGrammarLexer lexer = new MyGrammarLexer(sStream);    CommonTokenStream tStream = new CommonTokenStream(lexer);    MyGrammarParser parser = new MyGrammarParser (tStream);    MyGrammarParser.program_return parserResult = parser.program();    CommonTree ast = (CommonTree)parserResult.Tree;    Print(ast);    string output = header + body + footer;    return output;}public static void PrintChildren(CT ast){    PrintChildren(ast, " ", true);}public static void PrintChildren(CT ast, string delim, bool final){    if (ast.Children == null)    {        return;    }    int num = ast.Children.Count;    for (int i = 0; i < num; ++i)    {        CT d = (CT)(ast.Children[i]);        Print(d);        if (final || i < num - 1)        { body += delim;        }    }}public static void Print(CommonTree ast){    switch (ast.Token.Text)    {        case "PROGRAM": //body += header; PrintChildren(ast); //body += footer; break;        case "GLOBALS": body += "rnrn// GLOBALSrn"; PrintChildren(ast); break;        case "GLOBAL": body += "public static "; PrintChildren(ast); body += ";rn"; break;      ....    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/410609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号