8000 GitHub - textX/textX at v0.1.x
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

textX/textX

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

textX

Meta-language in Arpeggio inspired by Xtext

textX follows closely the syntax and semantics of Xtext but differs in some places and is implemented 100% in Python using Arpeggio parser. It is fully dynamic - no code generation at all!

Installation

pip install textX

Quick start

There is no docs at the moment but here is a quick introduction what can be done. For more see examples.

  1. Write a language description in textX (file hello.tx):
HelloWorldModel:
  'hello' to_greet+={Who ','}
;

Who:
  name = /[^,]\*/
;

Description consists of a set of parsing rules which at the same time describe Python classes that will be used to instantiate object of your model.

  1. Create meta-model from textX language description:
from textx.metamodel import metamodel_from_file
hello_meta = metamodel_from_file('hello.tx')
  1. Optionally export meta-model to dot (visualize your language abstract syntax):
from textx.export import metamodel_export
metamodel_export(hello_meta, 'hello_meta.dot')

hello_meta.dot

You can see that for each rule from language description an appropriate Python class has been created. A BASETYPE hierarchy is builtin. Each meta-model has it.

  1. Create some content (i.e. model) in your new language (example.hello):
hello World, Solar System, Universe

Your language syntax is also described by language rules from step 1.

  1. Use meta-model to create models from textual description:
example_hello_model = hello_meta.model_from_file('example.hello')

Textual model ‘example.hello’ will be parsed and transformed to a plain Python object graph. Object classes are those defined by the meta-model.

  1. Optionally export model to dot to visualize it:
from textx.export import model_export
model_export(example_hello_model, 'example.dot')

example.dot

This is an object graph automatically constructed from ‘example.hello’ file.

  1. Use your model: interpret it, generate code … It is a plain Python graph of objects with plain attributes!
0