Popularity
3.0
Growing
Activity
8.6
Growing
154
10
21

Programming language: C#
License: MIT License
Tags: Parser Library    
Latest version: v2.7.0.0

CSLY alternatives and similar packages

Based on the "Parser Library" category.
Alternatively, view CSLY alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of CSLY or a related project?

Add another 'Parser Library' Package

README

C# lex and yacc

Test status Coverage Status .NET Core FOSSA Status

License: MIT NuGet

Csly is inspired by the Python lex yacc library (PLY) and aims to simplify generating lexer/parsers in C#.

Getting started

If you'd like to get coding right away, read the quick getting-started guide, which will guide you through the implementation of a basic parser.

Documentation and examples ##

Complete documentation can be found in the wiki. For a list of more advanced samples check out the samples folder in the repo.

Csly special features

Csly is packed with special features that make it simpler to use, maintainable, and type-safe.

Fully embeddable

Csly has been designed to avoid extra build steps. Parser generators often need a build-time step to generate target language source code. That is not the case with csly. A simple Nuget command will configure csly for use in a 100% .NET implementation.

Csly does not need a build-time step, simplifying the build/CI process

Compact lexer/parser definition ###

The csly lexer/parser is defined with only 2 types:

  • a C# enum for the lexer,
  • a C# class for the parser.

Lexeme and parser production rules are defined using C# custom attributes making your code compact and readable. Although these features already exist with parser combinators (like Sprache or Eto.Parse), csly can use productions rules defined using either BNF or EBNF notation, which I think is more natural and easier to understand, assuring maintainability.

Define languages in a very compact and dependency-free way

See Lexer for lexers definition and BNF or EBNF for parser definitions.

Fully and Strictly typed ###

Csly is strictly typed, so every parser you define renders according to its input and output types. For additional details on parser typing, head to the [typing section](typing).

Be more confident that your parser will generate valid inputs and outputs.

Expression parsing ###

Many domain-specific languages need parsing expressions (boolean or numeric). A recursive-descent parser is hard to maintain when parsing expressions have multiple precedence levels. For that reason, csly offers a way to generate expression-parsing rules using only operator tokens and a simple-to-understand precedence scheme. Csly will then generate production rules to parse expressions, managing precedence and either left-or-right associativity.

Avoid burdensome home-made expression parser implementations.

see expression parsing

Indentable languages support

Some languages use indentation to denote functional blocks, like Python or Yaml. Csly provides native support for indentation. Head to Indented Languages

Easily use indentation to make your language more readable.

Generic lexer ###

Lexemes are often similar from one language to another. Csly introduces a generic lexer that defines common lexemes and which can be reused across languages. The built-in generic lexer has better performance than a regex-based lexer.

Reuse common token definition and take avantage of better lexer performance.

See Generic lexer for the generic lexer implementation and Lexer for a general presentation on rolling your own.

What Csly is and isn't

Csly is not ####

Csly is not a fully-featured parser generator like ANTLR. You should therefore not use it to define strong-typed languages like C# or Java.

Csly is ####

Csly is perfect for small domain-specific languages (DSLs) that can be bundled in C# applications for end-users to interact with your application using natural language, for example.

Installation

Install from the NuGet gallery GUI or with the Package Manager Console using the following command:

Install-Package sly

or with dotnet core

dotnet add package sly

License

FOSSA Status


*Note that all licence references and agreements mentioned in the CSLY README section above are relevant to that project's source code only.