2011-11-26 19 views
9

Çok basit bir Antlr dilbilgisini Xtext'e dönüştürmek istiyorum, bu nedenle syntactic predicates, fancy features of Antlr not provided by Xtext. Bu dilbilgisiBasit Antlr dilbilgisini Xtext'e dönüştürme

grammar simple; // Antlr3 

foo: number+; 
number: NUMBER; 
NUMBER: '0'..'9'+; 

ve Xtext muadili

grammar Simple; // Xtext 
import "http://www.eclipse.org/emf/2002/Ecore" as ecore 
generate Simple "http://www.example.org/Simple" 

Foo: dummy=Number+; 
Number: NUMBER_TOKEN; 
terminal NUMBER_TOKEN: '0'..'9'+; 

Xtext perde arkasında antlr kullanır, ancak iki biçimi tam olarak aynı değildir düşünün. terminaller

  • üst-bir özellik ekleme çalışması için
  • import "http://www.eclipse.org/emf/2002/Ecore" as ecore Dahil terminal anahtar kelime ile

    • Önek terminalleri: dahil Ben değiştirmek zorunda epeyce can sıkıcı (ve kısmen anlaşılabilir) şeyler vardır seviye kuralı foo: dummy=number+
    • Kural ve terminal adlarının büyük/küçük harfe duyarsız olmaları gerektiğini unutmayın.
    • İsteğe bağlı olarak, Java sözleşmesini takip etmek için ilk kural adları harfini büyük yazınız.

    Bu dönüştürmeyi en az basit durumlarda otomatik olarak yapmak için bir araç var mı? Değilse, gerekli değişiklikler için daha eksiksiz bir kontrol listesi var mı?

  • +0

    Tam olarak ne istediğinizi yapan herhangi bir araç bilmiyorum, ancak dilbilgisini XML'ye dönüştürebilir (http://bottlecaps.de/convert/) ve sonuçta bazı XQuery veya XSLT'yi çalıştırabilirsiniz. İstenen hedef formatına dönüşür. Dönüştürücü, bir ANTLR dilbilgisinin sadece temel yapısını anlar, ama sizin için istediğin buydu. – Gunther

    +0

    @BartKiers ve Gunther, yardımlarınız için ikinize de minnettarım, ancak bu konuşma konu dışı görünüyor. Gunther, çeviriciniz için bir sorun takipçiniz olabilir (ki ben de çok keyifle kullanıyorum), bu yüzden orada devam edilebilir. –

    +1

    @AdamSchmideg, haklısınız, tamamen konuyla ilgili değildi, ama konuyla ilgili bir yorum yaptı: Dürüst olmak gerekirse, biraz yapışkanlısınız. Ama yeterince adil, senin sorunun, o yüzden sesimi kaldıracağım. Özür dilerim. @Gunther, bu Q & A'daki '~' char kullanımını açıklamaya çalıştım: http://stackoverflow.com/questions/8284919/negating-inside-lexer-and-parser-rules –

    cevap

    3

    Antlr dilbilgisi, Xtext dilbilgisinde gereken bilgileri içermediği için temel olarak bu dönüşümü otomatik olarak yapmak mümkün değildir. Xtext'deki kural adları onlardan sınıf oluşturmak için kullanılacaktır. Xtext'te o sınıflarda getters ve setter olacak ödevler var. Ancak, Xtext'te ortaya çıkan AST'deki gürültüyü azaltmaya izin veren özel desenler bulunduğundan, bu atamalar her kural çağrısı için kullanılmamalıdır. Bunun gibi şeyler bu dönüşümü otomatik olarak gerçekleştirmeyi neredeyse imkansız hale getirir. Ancak, Antlr dilbilgisini Xtext editörüne kopyalamak ve sorunları manuel olarak düzeltmek genellikle doğrudur.

    +1

    Sorunu el ile düzeltmek çok iş anlamına gelebilir, çünkü Xtxt beni AST hakkında düşünmeye zorluyor, Antlr ise özensiz bir şeyle mutlu oluyor, AST'ye yaklaşım –

    İlgili konular