我从github grammars-v4下载了词法分析器和解析器.g4文件
在Visual Studio中,我使用包Antlr4 4.6.6和Antlr4.Runtime.St和ard 4.13.1启动了一个新的类库项目
在构建类库时,我看到以下错误
mismatched input 'options {' expecting COLON while matching a lexer rule PostgresSqlClasses ...\PostgreSQLLexer.g4 1421
mismatched input '=' expecting COLON while matching a rule PostgresSqlClasses ...\PostgreSQLLexer.g4 1422
mismatched input ';' expecting COLON while matching a rule PostgresSqlClasses ...\PostgreSQLLexer.g4 1422
mismatched input 'options {' expecting COLON while matching a lexer rule PostgresSqlClasses ...\PostgreSQLLexer.g4 1616
和
mismatched character '<EOF>' expecting ']' PostgresSqlClasses ...\antlr4.codegenerator\4.6.6\build\Antlr4.CodeGenerator.targets 132
我可以看到语法文件最近已经更新了.是我遗漏了什么,还是那些.g4文件有误?
--Bart Kier下面的回答表明,这不是语法文件出错,而是与我的Visual Studio 2022或Java设置有关.
--确认了下面巴特慷慨帮助后的语法没有问题.
我现在正在遵循Kaby76的S的建议,使用Antlr4BuildTask法.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<None Remove="PostgreSQLLexer.g4" />
<None Remove="PostgreSQLParser.g4" />
</ItemGroup>
<ItemGroup>
<Antlr4 Include="PostgreSQLLexer.g4">
<Package>AntlrPostgresClasses</Package>
<AntOutDir>GeneratedOutput</AntOutDir>
</Antlr4>
<Antlr4 Include="PostgreSQLParser.g4">
<Package>AntlrPostgresClasses</Package>
<AntOutDir>GeneratedOutput</AntOutDir>
</Antlr4>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Antlr4.Runtime.St和ard" Version="4.13.1" />
<PackageReference Include="Antlr4BuildTasks" Version="12.7.0" PrivateAssets="All" />
</ItemGroup>
</Project>
我可以看到一些(但不是全部).cs单元正在生成-现在我看到了错误
CS0246类型或命名空间名称"PostgreSQLLexforBase"不能是 已找到(是否缺少Using指令或程序集 参考?)AntlrPostClors C:\Repos\PostgresParsers\AntlrPostgresClasses\GeneratedOutput\PostgreSQLLexer.cs 35
和
CS0246类型或命名空间名称"PostgreSQLParserBase"不能是 已找到(是否缺少Using指令或程序集 参考?)AntlrPostGresClasses C:\Repos\PostgresParsers\AntlrPostgresClasses\GeneratedOutput\PostgreSQLParser.cs 38
the error occurs within the newlygenerated units
On kaby76's advice I added the 4 files found here 和 the class library now builds.
奇怪的是,它第一次没有建成,但它现在似乎很高兴.