Hi Guillaume

I don't think I can answer your questions, as I'm not a language developer, 
but this topic interests me;

What are the Racket Syntax Classes you have implemented? Can you provide an 
example?

I'm aware of syntax objects, as a specialised data structure for syntax 
manipulation, but despite the 'object' in the 'syntax-object' I don't
believe they are integrated into the main Racket class/object system.

https://docs.racket-lang.org/reference/syntax-model.html#%28tech._syntax._object%29
(This link also has a section on scopes, but I don't know if it is what you 
are looking for?)

Kind regards, 

Stephen



On Thursday, May 21, 2020 at 5:36:08 PM UTC+1, Guillaume Savaton wrote:
>
> I am a Racket beginner trying to create my own DSL.
> As a long-time user of Xtext and other similar tools in the Eclipse 
> ecosystem, I have come to Racket expecting that it would address similar 
> concerns.
> At the moment, I have mixed feelings: I find the metaprogramming 
> facilities in Racket very effective, but at the same time I am struggling 
> to achieve tasks that were supported natively by Xtext.
>
> For those who don't know Xtext, here is a summary of how it works:
>
>    - A language project is based on a grammar with attribute annotations.
>    - The grammar is converted into a "metamodel", i.e. a set of classes 
>    where each grammar rule corresponds to a class.
>    - A parser is automatically generated. It can convert some source text 
>    into a "model", i.e. a set of instances of the classes from the metamodel.
>    - A model can be manipulated using Java APIs. Specialized languages 
>    are available to constrain a model, query it, transform it, or generate 
>    code using templates.
>
>
> In Racket, I have started my language project by reproducing what I would 
> have done in Xtext:
>
>    - I have created a grammar with bragg
>    - I have written a set of syntax classes that play the role of the 
>    metamodel
>
> Syntax Classes example? 

>
>    - Syntax objects play the role of the model, and I can get their 
>    attributes with syntax-parse
>    - I have written several macros that can generate Racket code in the 
>    simplest cases.
>
>
> However, I miss some facilities that Xtext provides out-of-the-box:
>
>    - Racket syntax classes do not directly support inheritance.
>    - Syntax objects are not tied to syntax classes in a class-instance 
>    relationship, and I have to use syntax-parse every time I want to read an 
>    attribute.
>    - Xtext automatically creates child->parent references in the 
>    generated AST. In Racket, it seems that I cannot get the parent of a 
> syntax 
>    object.
>    - Xtext provides a default mechanism for resolving named references, 
>    and a scoping API for languages that need specific scoping rules. The AST 
>    generated by Xtext is actually an object graph rather than a tree.
>    
>
> My main concern is about managing the scopes/lexical contexts in my 
> language. I am still browsing the documentation but I have found no library 
> or guide that addresses this issue.
> The language examples that I have found are either too simple (their 
> scoping rules can be easily mapped to those of Racket through macros), or 
> use ad-hoc techniques, so that it is difficult to infer a general 
> methodology.
>
> So far, I have made two attempts to work around these issues: (1) by 
> creating a metamodel-like data structure using Racket structs, and 
> transforming syntax objects into struct instances; or (2) using syntax 
> objects only and attaching context data to each of them as a syntax 
> property.
> Both have strengths and weaknesses, and I am still feeling that I am not 
> using Racket with the right mindset.
>
> I hope I have made my concerns clear. Maybe I can create a small example 
> to further illustrate what I want to do and where I am stuck.
> Have you experienced similar concerns in one of your projects?
> What design patterns would you recommend ?
> Do you know any well-commented real-life example that I could use for 
> inspiration?
>
> Thanks in advance for your answers.
>
> Guillaume Savaton
>
> N.B: I have also published a similar question at stackoverflow two weeks 
> ago, but it still has no answer:
>
> https://stackoverflow.com/questions/61622912/domain-specific-languages-in-racket-compared-to-model-driven-frameworks-such-as
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/c2f9d8c1-51b1-4d5e-9e9e-6e49682c56a5%40googlegroups.com.

Reply via email to