Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Antlr中的语法规则获取文本的匹配段集_C#_Antlr_Antlr3 - Fatal编程技术网

C# 使用Antlr中的语法规则获取文本的匹配段集

C# 使用Antlr中的语法规则获取文本的匹配段集,c#,antlr,antlr3,C#,Antlr,Antlr3,我已经定义了一套语法规则。将此视为示例规则。 public bodylist : bodyset* ; public bodyset : ruleSet | media | page ; 如果我必须使用这些规则进行解析,我必须按照下面的方法进行 Stream inputStream = Console.OpenStandardInput(); ANTLRInputStream input = new ANTL

我已经定义了一套语法规则。将此视为示例规则。
public bodylist
    : bodyset*
    ;

public bodyset
    : ruleSet
    | media
    | page
    ;  
如果我必须使用这些规则进行解析,我必须按照下面的方法进行

        Stream inputStream = Console.OpenStandardInput();
        ANTLRInputStream input = new ANTLRInputStream(inputStream);
        CLexer lexer = new CLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        CParser parser = new CParser(tokens);

        parser.bodylist();
我对访问流中匹配段集的躯干集的方式感到困惑。似乎我必须做另一个解析,如下所示

        parser.bodyset();
流中可以有多个bodyset语法匹配段集

假设在输入流中有多个匹配此规则的位置。我想得到的是关于这些
bodyset
信息集的信息(在每一个信息中,语法规则的开始和结束是什么)


我无法找到访问流中
bodyset
语法规则的匹配集信息的方法。我对API感到困惑。

ANTLR 3不会像ANTLR 4那样自动创建具有侦听器和访问者的解析树。您需要执行以下操作之一:

  • 升级到ANTLR 4,其中
    bodylist
    方法将返回
    BodylistContext
    对象,该对象提供了一个
    bodyset()
    方法,该方法返回一组
    BodysetContext
    对象(每个
    bodyset
    解析对象对应一个)
  • 继续使用ANTLR 3,但是使用
    output=AST
    特性和树语法来处理输入
  • 继续使用Antlr3,并将操作代码添加到语法中,以手动构建解析树

  • 再次非常感谢@280728。我会选择升级解决方案。我会尝试一下,然后再来。:)