ANTLR不与VS2017合作



我正在尝试使用 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>

相关内容

  • 没有找到相关文章

最新更新