ANTLR 4.7.1:antlr4运行时中的C ++代码具有错误的include路径,可能是由于.vscode中的includePath错误

问题描述 投票:0回答:1

[当downloading(在C ++,Windows)下,包含在其中的文件的目录并不总是相对于该文件,例如,antlr4-runtime/atn/AbstractPredicateTransition.h包含#include "atn/Transition.h",除非我删除了atn/,否则该文件将失败。很多文件都会发生这种情况。

有时文件包含正确和不正确的内容,例如,此处两个头文件都与文件位于同一目录中,因此只有最下面的一个正确:

#include "atn/AbstractPredicateTransition.h"
#include "SemanticContext.h"

应该是:

#include "AbstractPredicateTransition.h"
#include "SemanticContext.h"

antlr4-runtime\atn\PrecedencePredicateTransition.h

我试图通过在同一目录中创建一个新的.vscode文件夹并添加带有以下文本的c_cpp_properties.json文件来解决此问题(我不知道是否需要includePath以外的其他内容,但我ve不管怎么说,以防万一):

{
"configurations": [
    {
        "name": "Win32",
        "includePath": [
            "${workspaceFolder}",
            "antlr4-runtime",
            "antlr4-runtime/atn",
            "antlr4-runtime/dfa",
            "antlr4-runtime/misc",
            "antlr4-runtime/support",
            "antlr4-runtime/tree"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE",
            "_UNICODE"
        ],
        "intelliSenseMode": "msvc-x64",
        "browse": {
            "path": [
                "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/VS/include/*",
                "${workspaceFolder}"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        },
        "cStandard": "c11",
        "cppStandard": "c++17",
        "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe"
    }
],
"version": 4
}

注意:尽管有通往Visual Studio的路径,但我正在使用Visual Studio 代码

我已经尝试过includePath的各种不同列表,例如["${workspaceFolder}", "antlr4-runtime"]和放置antlr4-runtime in a different folder higher up。但是,它仍然给我同样的错误,即包含无效的包含路径。

[似乎,如果我可以使文件尝试从antlr4-runtime文件夹开始包含,那么所有包含都将是有效的,因为似乎所有包含都相对于该文件夹内部。

在屏幕截图中,我正在尝试通过解析JSON来创建'hello world'。

Driver.cpp中,包含以下内容:

#include <iostream>
#include <fstream>

#include "antlr4-runtime/antlr4-runtime.h"
#include "JSONLexer.h"
#include "JSONParser.h"
#include "antlr4-runtime/JSONVisitor.h"

(这些都没有下面的红色波浪线)

antlr4-runtime文件夹中有各种与JSON相关的文件,但其余部分是从here下载的(对于Windows为4.7.1)。

File structure in Visual Studio Code

c++ visual-studio-code antlr4 vscode-settings include-path
1个回答
0
投票
VSCode C ++由LSP服务器实现,它可能需要构建文件才能理解所有内容。 Cpp和h文件无法创建程序-从来没有。这就是Make发明的原因。目前尚不清楚您拥有什么构建文件(图片中未列出任何内容)。了解LSP的工作原理(我正在编写Antlr LSP服务器),我不希望VSCode将这些设置转发给LSP服务器进行构建。因此,是的,我希望服务器标记这些#include。看到这种缺失,我决定使用CMake制作Windows Antlr C ++程序。该程序可以在VSCode中生成并正常运行。并且我能够将#include“ atn / AbstractPredicateTransition.h”添加到源中,并将“ Go to Definition”添加到该include及其包含的文件中。 VSCode对于任何#include行都没有红色的波浪线。您可能会更改“ include_directories”宏以包含Antlr运行时子目录,但是我没有尝试过,而且我很可能在#includes中保留了“ atn /”前缀。我使用了Antlr4.8,CMake,并在here中进行了设置说明。我写的代码是here。在VS2019中也可以正常工作。
© www.soinside.com 2019 - 2024. All rights reserved.