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.

