dsl

Hi

How can I best parse something recursively?

Use Ruby as DSL, or are there better tools (using another language??)

data := [ parts ] # joined by ','

 parts = <VAR> assignments parts </VAR>    \# part can include part \!\!

 assignment := var=val

 assignments := assignment\{0,n\} \(joined by ','\)

# VAR, var, val are (different) strings for each item.

Thank you
Opti

Please take a look at this:

https://kschiess.github.io/parslet/

···

On 12/20/21 13:03, Die Optimisten wrote:

Hi

How can I best parse something recursively?

Use Ruby as DSL, or are there better tools (using another language??)

data := [ parts ] # joined by ','

parts = <VAR> assignments parts </VAR>    \# part can include part \!\!

assignment := var=val

assignments := assignment\{0,n\} \(joined by ','\)

# VAR, var, val are (different) strings for each item.

If you want to build an Internal DSL (aka Embedded DSL in Ruby:
InternalDslStyle), Glimmer's DSL Engine
enables building the most flexible yet minimalistic DSLs possible in Ruby:
GitHub - AndyObtiva/glimmer: DSL Framework consisting of a DSL Engine and a Data-Binding Library used in Glimmer DSL for SWT (JRuby Desktop Development GUI Framework), Glimmer DSL for Opal (Pure Ruby Web GUI), Glimmer DSL for LibUI (Prerequisite-Free Ruby Desktop Development GUI Library), Glimmer DSL for Tk (Ruby Tk Desktop Development GUI Library), Glimmer DSL for GTK (Ruby-GNOME Desktop Development GUI Library), Glimmer DSL for XML (& HTML), and Glimmer DSL for CSS

For example, I recently wrote this Pixelart DSL with it in one hour:

DSL Code (just 2 types of expressions):

I also recently wrote this GTK DSL with it in one day:

DSL Code (just 3 types of expressions):

Cheers,

···

On Mon, Dec 20, 2021 at 7:07 AM hmdne <hmdne@airmail.cc> wrote:

Please take a look at this:

parslet - About

On 12/20/21 13:03, Die Optimisten wrote:
> Hi
>
> How can I best parse something recursively?
>
> Use Ruby as DSL, or are there better tools (using another language??)
>
> data := [ parts ] # joined by ','
>
> parts = <VAR> assignments parts </VAR> # part can include part !!
>
> assignment := var=val
>
> assignments := assignment{0,n} (joined by ',')
>
> # VAR, var, val are (different) strings for each item.

Unsubscribe: <mailto:ruby-talk-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-talk&gt;

--
Andy Maleh

LinkedIn: Andy Maleh - Lexop | LinkedIn
<https://www.linkedin.com/in/andymaleh&gt;
Blog: http://andymaleh.blogspot.com
GitHub: http://www.github.com/AndyObtiva