#language #yarn #dialog #lexer #interactive #silkworm #internal

silkworm_syn

Parser for the Yarn interactive dialogue language. Internal dependency of silkworm.

2 releases

0.1.0-dev.1 Jun 23, 2020
0.1.0-dev.0 May 26, 2020

#2875 in Parser implementations


Used in silkworm

MIT license

170KB
4.5K SLoC

silkworm

silkworm is an implementation of the Yarn interactive dialogue language in pure Rust.

Work-in-progress

silkworm is currently in the initial development phase. Any and all features advertised might not be implemented yet!

  • Lexer
  • Parser
  • Runtime
    • Source map
    • IR definition, AST validation and lowering
    • Interpreter
  • User-facing API
  • CLI tools?

(Hopefully) Features

  • Zero-copy parsing of plain text in dialogue.
  • Support for a superset of Yarn 1.1, with useful features such as scoped identifiers and subroutines.
  • Passive runtime for easy integration into any kind of program.
  • In Rust!

Differences from YarnSpinner

Runtime

The silkworm runtime is passive and does not assume a real-time environment. As a result, commands like wait must be provided by the user, even though it is built-in in YarnSpinner.

It's also not currently planned to include implementations for YarnSpinner's built-in format functions (select, plural and ordinal), as development is being focused on the language itself. Users may provide their own format functions if needed.

Keywords

In addition to YarnSpinner keywords and operators, a few currently unused keywords are reserved for forward compatibility.

See docs/keywords.md for a full list of currently used and reserved keywords.

Pragmas

silkworm supports pragmas, which are instructions placed in the source code that change silkworm's behavior. They take the form of //# name(<arg>, ...) or //#! name(<arg>, ...) comments. Pragmas may be disabled entirely using the runtime API.

Pragmas that start with //# precede the code they modify, and are referred to as "outer"-style pragmas. Pragmas that start with //#! are placed inside the blocks they modify, and are referred to as "inner"-style pragmas. Some pragmas can only be placed at the beginning of files. These pragmas must be in the "inner"-style and precede all nodes in the file, but may be preceded or followed by any number of regular comments.

By default, silkworm will produce warnings when it encounters pragmas that it does not understand.

See docs/pragmas.md for a full list of pragmas supported by silkworm.

Language features

silkworm's dialect includes a number of useful extensions over Yarn 1.1. These features can be enabled or disabled individually on the runtime, or for individual files using feature pragmas at the top of the file.

See docs/features.md for a full list of language features supported by silkworm.

License

silkworm is available under the MIT license.


lib.rs:

Parser for the Yarn interactive dialogue language.

This crate is mostly intended to be an internal dependency of the silkworm project, an implementation of the Yarn interactive dialogue language in pure Rust. End users are expected to use silkworm, the user-facing API, instead of depending on this crate directly.

This crate contains the AST definitions for the language, a lexer, and a parser. All components assume that all sources logically reside in a continuous space that can be indexed using byte positions.

Dependencies

~3.5–10MB
~102K SLoC