我正在尝试使用 antlr 在 .net core 1.0 项目中使用 vs2017 。
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吗?我可以遵循一个很好的例子,将ANTLR与.NET Core使用?
这只是我在.NET标准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是创建此答案时唯一可用的版本。
我只是在寻找同一件事,对于.net core 2.0。
当前的antlr4软件包版本为4.6.5 beta 1.在此版本中,C#生成器已移植到C#,因此删除了对Java的依赖。这仍然是实验性的,必须手动启用:
<Antlr4UseCSharpGenerator>True</Antlr4UseCSharpGenerator>
修改.g4
文件时不会生成文件。当调用dotnet build
时,它们将生成。
文件球的工作原理,但更改诸如<Visitor>false</Visitor>
之类的设置需要dotnet build
之前的dotnet clean
。
可以在源中找到默认的ANTLR任务选项:
<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>
Globbing Works,因此,如果我想构建所有g4
文件和禁用访问者,我要写的只是:
<ItemGroup>
<Antlr4 Include="**/*.g4" >
<Visitor>false</Visitor>
</Antlr4>
</ItemGroup>
我的整个csproj
文件看起来像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Antlr4UseCSharpGenerator>True</Antlr4UseCSharpGenerator>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Antlr4">
<Version>4.6.5-beta001</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Antlr4 Include="**/*.g4" >
<Visitor>false</Visitor>
</Antlr4>
</ItemGroup>
</Project>