用于生成基于antlr的分析器的setuptools命令。
setuptools-antlr的Python项目详细描述
概述
用于生成基于antlr的解析器的setuptools命令。
这是setuptools的扩展,将著名的ANTLR解析器生成器集成到python打包过程中。它封装了基于java的antlr生成器,并为用户提供一个命令来控制生成过程。
antlr的所有命令行选项也可以通过setuptools命令使用。用户可以选择在命令行上传递选项,或者在setup.cfg文件的专用部分中配置antlr。
自动检测antlr语法及其依赖项,如导入的语法或令牌文件。在执行antlr命令期间,将为每个语法生成一个python包。
安装
setuptools-antlr可以以多种方式安装。要运行它,必须满足以下先决条件:
- Python3.5+
- 设置工具
- Java JRE 1.7+
源发行版已随antlr 4.7.1一起提供。不需要另外下载antlr。
安装之后,使用的python环境有一个名为antlr的新setuptools命令。
源代码
> git clone https://github.com/ferraith/setuptools-antlr.git > cd setuptools-antlr > pip install .
来自Pypi
> pip install setuptools-antlr
从github版本
> pip install <setuptools-antlr_wheel>
用法
积分
为了获得流畅的用户体验,建议使用setup函数的setup_requires参数传递setuptools-antlr。另外,每个生成的解析器都需要antlr运行时库,该库应该添加到install_requires参数:
setup(...setup_requires=['setuptools-antlr'],install_requires=['antlr4-python3-runtime']...)
在生成解析器之前,setuptools将自动检查python环境,并从PyPI下载setuptools-antlr。在安装项目包期间,pip将把antlr4-python3-runtime安装到python环境中。
配置
setuptools-antlr提供了两种配置antlr解析器生成器的可能性。
在antlr命令之后,可以在命令行上传递antlr的所有选项:
> python setup.py antlr --visitor
还可以将多个选项传递给antlr或同时执行多个命令:
> python setup.py antlr --visitor --grammar-options "superClass=Abc tokenVocab=SomeLexer" bdist_wheel
有关可用的命令行选项,请参见python setup.py antlr --help:
> python setup.py antlr --help ... Options for 'AntlrCommand' command: --grammars (-g) specify grammars to generate parsers for --output (-o) specify directories where output is generated --atn generate rule augmented transition network diagrams --encoding specify grammar file encoding e.g. euc-jp --message-format specify output style for messages in antlr, gnu, vs2005 --long-messages show exception details when available for errors and warnings --listener generate parse tree listener (default) --no-listener don't generate parse tree listener --visitor generate parse tree visitor --no-visitor don't generate parse tree visitor (default) --depend generate file dependencies --grammar-options set/override a grammar-level option --w-error treat warnings as error --x-dbg-st launch StringTemplate visualizer on generated code --x-dbg-st-wait wait for STViz to close before continuing --x-force-atn use the ATN simulator for all predictions --x-exact-output-dir output goes into -o directories regardless of paths/package --x-log dump lots of logging info to antlr-<timestamp>.log ...
antlr文档详细解释了所有的command line options和grammar options。
除了在命令行上传递选项外,还可以将专用的[antlr]节添加到setup.cfg。以下示例部分包含所有可用选项:
[antlr]# Specify grammars to generate parsers for; default: None#grammars = <grammar> [<grammar> ...]# Specify directories where all output is generated; default: ./output=default=gen# Generate DOT graph files that represent the internal ATN data structures (yes|no); default: no#atn = no# Specify grammar file encoding; default: utf-8#encoding = utf-8# Specify output style for messages in antlr (antlr|gnu|vs2005); default: antlr#message-format = antlr# Show exception details when available for errors and warnings (yes|no); default: no#long-messages = no# Generate a parse tree listener (yes|no); default: yes#listener = yes# Generate parse tree visitor (yes|no); default: novisitor=yes# Generate file dependencies (yes|no); default: no#depend = no# Set/override grammar-level options (<option>=<value> [<option>=value ...]); default: language=Python3grammar-options=superClass=Abc tokenVocab=SomeLexer# Treat warnings as errors (yes|no); default: no#w-error = no# Launch StringTemplate visualizer on generated code (yes|no); default: no#x-dbg-st = no# Wait for STViz to close before continuing#x-dbg-st-wait = no# All output goes into -o dir regardless of paths/package (yes|no); default: no#x-exact-output-dir = no# Use the ATN simulator for all predictions (yes|no); default: no#x-force-atn = no# Dump lots of logging info to antlr-<timestamp>.log (yes|no); default: no#x-log = no
在resources目录中提供了引用配置。
样本
除了setuptools-antlr源代码之外,在samples目录中还提供了一个名为foobar的示例项目。此示例由两个antlr语法Foo和Bar组成。在执行setuptools-antlr期间,两个python包将生成到foobar包目录中,其中包含每个语法的解析器。
要为两个语法生成解析器并构建一个foobarwheel包,请执行以下命令:
> python setup.py antlr bdist_wheel