if语句不适用于我的语法

时间:2013-03-07 14:15:56

标签: c if-statement antlr grammar antlrworks

我的if语句与我的语法有问题,可以在http://sd-g1.archive-host.com/membres/up/24fe084677d7655eb57ba66e1864081450017dd9/CNew.txt找到。当我在Ctrl + D中键入时:

  int k = 0;
  if ( k ==0 ){
       return k;
  }

树解析器在“if(”处停止,并且控制台没有说明任何原因。有人知道问题可能来自哪里吗?

1 个答案:

答案 0 :(得分:1)

假设你的语法的入口点是translation_unit,看起来解析器在匹配单个external_declaration后就停止了。尝试在该规则的末尾添加EOF(文件结尾)标记,以便强制解析器匹配整个输入:

translation_unit
    : external_declaration+ EOF
    ;

但是,我没有看到external_declaration如何匹配语法中的if - 语句(selection_statement)。您可能希望在statement

中添加external_declaration
translation_unit
scope Symbols; // entire file is a scope
@init {
  $Symbols::types = new HashSet();
}
    : (external_declaration)+ EOF
    ;

external_declaration
    : function_definition
    | declaration
    | statement
    ;

之后您的输入将被正确解析。