c - if 语句不适用于我的语法

标签 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(”处停止,并且控制台没有说明任何原因。请问有人知道问题出在哪里吗?

最佳答案

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

translation_unit
    : external_declaration+ EOF
    ;

但是,我看不出 external_declaration 如何匹配语法中的 if 语句(selection_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
    ;

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

关于c - if 语句不适用于我的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273457/

相关文章:

c - Redis 中具有相同 key 的 SET 和 GET 之间是否存在延迟?

c - 如何编写一个可以同时采用动态/静态分配的二维数组的 c 函数?

algorithm - 如何摆脱重复的 if 语句?

python - 如何使用for循环,if-else合并两个文件?

c# - 如果没有赋值,If Then Else 速记将不起作用

java - 如何访问 ANTLR 词法分析器 token

c - 是什么阻止了 GCC __restrict__ 限定词的工作

c++ - 已编译的可执行文件被视为特洛伊木马威胁

java - 解释期间 Antlr MismatchedSetException

java - 以下 JAVA 谓词的语法