Skip to main content

SignalFx SignalFlow language grammar

Project description

SignalFlow language grammar
===========================

This repository contains the SignalFx SignalFlow language grammar and the
structure and tools required to generate the public code artifacts that make
this grammar available in various languages.

The language is in ANTLR4 format and we use the `antlr` tool to generate the
corresponding source code for the target languages. From there, we can build
artifacts that can be included as dependencies in various projects that need to
parse SignalFlow programs.

**Note:** if you're looking to use the grammar, you should use one of the
generated artifacts instead of this repository.

Available languages
-------------------

Java
~~~~

The ``com.signalfx.public:signalflow-grammar`` artifact Jar is available on
Maven Central:

.. code:: xml

<dependency>
<groupId>com.signalfx.public</groupId>
<artifactId>signalflow-grammar</artifactId>
<version>2.7.0</version>
</dependency>

Javascript
~~~~~~~~~~

The library is available for npm.js, and as a standalone browserified Javascript bundle.

Node.js
^^^^^^^

.. code::

npm install -g signalflow-grammar.js

In browser
^^^^^^^^^^

.. code:: html

<script type="text/javascript" src="https://s3.amazonaws.com/public-sites--signalfx-com/cdn/signalflow-grammar-2.7.0.js"></script>

Python
~~~~~~

The library is available on PyPI and depends on the Python2 ANTLR runtime:

.. code::

$ pip install signalflow-grammar==2.7.0

Then, from your code, you can do:

.. code:: python

import antlr4
from signalflow.grammar.SignalFlowV2Lexer import SignalFlowV2Lexer
from signalflow.grammar.SignalFlowV2Parser import SignalFlowV2Parser

def parse(program):
lexer = SignalFlowV2Lexer(program)
stream = antlr4.CommonTokenStream(lexer)
parser = SignalFlowV2Parser(stream)
...

Generating or updating the artifacts
------------------------------------

Due to the Python like nature of SignalFlow some native code is
required to keep track of indent/dedent levels. This native code
is stored in <language>/grammar/*.g4. These native code files are
stitched into SignalFlowLexer.g4 by the generate_grammar.py script.

Update the generated source code with the ``generate.sh`` script:

.. code::

$ ./generate.sh <version>
$ git commit -a -m "Bump to version <version>"
$ git push origin master

Then for each language, perform a release of the corresponding package.

Java
~~~~

.. code::

$ cd java/
$ mvn clean deploy -P release-sign-artifacts -DperformRelease=true -DrepositoryId=ossrh -Dgpg.useagent=false

Javascript
~~~~~~~~~~

.. code::

$ cd javascript/
$ npm publish
$ aws s3 cp signalflow-grammar-<version>.js s3://public-sites--signalfx-com/cdn/

Python
~~~~~~

.. code::

$ cd python/
$ python setup.py bdist_wheel
$ twine upload dist/signalflow_grammar-<version>-py2-none-any.whl


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

signalflow_grammar-2.10.0-py2-none-any.whl (34.2 kB view details)

Uploaded Python 2

File details

Details for the file signalflow_grammar-2.10.0-py2-none-any.whl.

File metadata

File hashes

Hashes for signalflow_grammar-2.10.0-py2-none-any.whl
Algorithm Hash digest
SHA256 48973781b1da4a38c4f5799e14e735f0905f5a9333d6e740312c3a39c6f9cbe0
MD5 4ec5624821a993361337505db0185050
BLAKE2b-256 82fbe4b90a0ca32a3f772ef52767609c9a95da8d90a485bdccd262ecfc497b8e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page