我正在尝试使用 VS2017 在 .net core 1.0 项目中使用 Antlr 设置一个简单项目。
关注https://github.com/sharwell/antlr4cs,将.g4文件添加到项目中。项目文件如下所示,
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp1.0</TargetFramework> </PropertyGroup>
<ItemGroup>
<None Remove="Calculator.g4" /> </ItemGroup>
<ItemGroup>
<PackageReference Include="Antlr4" Version="4.5.4-beta001" /> </ItemGroup>
<ItemGroup>
<AdditionalFiles Include="Calculator.g4" />
</ItemGroup>
</Project>
但文件说,
根据MSBuild属性找到现有的XML元素 上表中的列,如果尚不存在则添加一列。 例如,要生成解析树监听器和访问者 解析器的接口和基类,更新项目项 类似于以下内容。
<Antlr4 Include="CustomLanguage.g4"> <Generator>MSBuild:Compile</Generator> <CustomToolNamespace>MyProject.Folder</CustomToolNamespace> <Listener>True</Listener> <Visitor>True</Visitor> </Antlr4>
此proj文件中没有任何Antlr4标记。是否在 VS2017 中不支持Antlr? 是一个很好的例子,我可以遵循使用.net核心的ANtlr?
答案 0 :(得分:4)
这就是我在.NET Standard 1.3类库项目中需要的所有内容来保存语法文件。
<ItemGroup>
<Antlr4 Include="Something.g4">
<Generator>MSBuild:Compile</Generator>
<Listener>False</Listener>
<Visitor>False</Visitor>
</Antlr4>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Antlr4" Version="4.6.1-beta001" />
</ItemGroup>
请注意,您可能使用较新的Antlr4软件包版本,因为4.6.1是创建此答案时唯一可用的版本。
答案 1 :(得分:3)
我只是在为.NET Core 2.0寻找同样的东西。
当前的ANTLR4软件包版本是4.6.5 Beta 1.在这个版本中,C#生成器被移植到C#,因此删除了对Java的依赖。这仍然是实验性的,必须手动启用:
melt
修改<Antlr4UseCSharpGenerator>True</Antlr4UseCSharpGenerator>
文件时,不会生成文件。它们将在调用.g4
时生成。
文件通配符按预期工作但是更改dotnet build
之类的设置需要在<Visitor>false</Visitor>
之前调用dotnet clean
。
可以找到默认的Antlr任务选项in the source:
dotnet build
Globbing工作,所以如果我想构建所有<Antlr4>
<Generator>MSBuild:Compile</Generator>
<CustomToolNamespace Condition="'$(Antlr4IsSdkProject)' != 'True'">$(RootNamespace)</CustomToolNamespace>
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
<Encoding>UTF-8</Encoding>
<TargetLanguage>CSharp</TargetLanguage>
<Listener>true</Listener>
<Visitor>true</Visitor>
<Abstract>false</Abstract>
<ForceAtn>false</ForceAtn>
</Antlr4>
个文件并禁用访问者,我必须写的是:
g4
我的整个<ItemGroup>
<Antlr4 Include="**/*.g4" >
<Visitor>false</Visitor>
</Antlr4>
</ItemGroup>
文件如下所示:
csproj