ANTLR4'ü öğreniyorum ve sözlüksel modlarla çalmaya çalışıyordum. Aynı belirteci birden çok sözcüksel modda nasıl görüntüleyebilirim? Çok basit bir örnek olarak, dilbilgisinin iki modu olduğunu ve beyaz alanı ve satır sonu satırlarını her ikisinde eşlemek istiyorum. Örneğin WS_MODE1 ve WS_MODE2 ile bitmeden nasıl yapabilirim? Her iki durumda da aynı tanımı yeniden kullanmanın bir yolu var mı? Moddan bağımsız olarak tüm beyaz alan için çıkış akımında WS jetonları almayı umuyordum. Aynısı, EOL ve her iki modda görünebilen diğer anahtar kelimeler için geçerlidir.ANTLR4'te çoklu sözcük modlarında görünebilen belirtiler nasıl tanımlanır?
10
A
cevap
12
Kuralların farklı adları olması gerekir, ancak aynı tür vermek için -> type(...)
lexer komutunu kullanabilirsiniz.
WS : [ \t]+;
mode Mode1;
Mode1_WS : WS -> type(WS);
mode Mode2;
Mode2_WS : WS -> type(WS);
olsa Mode1_WS
ve Mode2_WS
fragment
kurallar değildir, kod üreteci type
komutunu göreceksiniz ve onların türlerini yeniden biliyoruz, bu yüzden onlar için belirteçleri tanımlamak olmayacaktır.
İlgili konular
- 1. WindowSpec'te çoklu aralık cümleleri nasıl tanımlanır?
- 2. Tüm programlama modlarında TODO'ları vurgulama
- 3. Kuruluş modlarında etiketlerle notlar düzenleme
- 4. Hatası - Belirtiler System.Data.DataRow
- 5. Tek bir stylus dosyasında çoklu ortam sorguları nasıl tanımlanır?
- 6. Paralel kod için ölçeklenebilirlik nasıl tanımlanır?
- 7. J Hat başına çoklu sözcük komutlarını kullanan satır örneği
- 8. Swagger'da harita nasıl tanımlanır?
- 9. artifact groupId nasıl tanımlanır?
- 10. ESC karakterleri nasıl tanımlanır?
- 11. FrontEndEventActions nasıl yeniden tanımlanır?
- 12. Kodda DataTemplate nasıl tanımlanır?
- 13. Scipy.optimize.curve_fit işlevi nasıl tanımlanır?
- 14. Bir sözcük etiketinde doğru sözcük kaydırma
- 15. Wordnet'te "sözcük dosyası" nasıl bulunur?
- 16. np.where pd.DataFrame'de sıfır olmayan belirtiler sözlüğü için
- 17. Lucene.Net Belirtiler token bölünmesine neden oluyor
- 18. uyarı: #endif yönergesi sonunda ek belirtiler
- 19. Maven'de koşullu özellikler nasıl tanımlanır?
- 20. Enum en3'te nasıl tanımlanır?
- 21. Bir cevap adresi nasıl tanımlanır?
- 22. WiX'te genel değişken nasıl tanımlanır
- 23. Özel şablon etiketi nasıl tanımlanır
- 24. Enum swagger.io dilinde nasıl tanımlanır?
- 25. TextView için ColorStateList nasıl tanımlanır?
- 26. Yalnızca test bağımlılıkları nasıl tanımlanır?
- 27. Rest-API V2 nasıl tanımlanır?
- 28. R'de as.dfftime +/- işareti nasıl tanımlanır?
- 29. NSAttributedString'de bir paragraf nasıl tanımlanır?
- 30. Sipariş nasıl tanımlanır [Array [Byte]]?
Bu Lexer kurallarının kullanımıyla ilgili kısa soru: ayrıştırıcı kurallarında WS veya Mode1_WS, Mode2_WS? İkisini de denedim ama sadece Lexer kurallarını doğrudan ayrıştırıcı kurallarına göndermeden tanımlarsınız. Bu senelerde, bir 'takma addan çok' bir ithalat ifadesi 'var. –
'type' komutu, ayrıştırıcının göreceği tür olan belirteç türünü açıkça atar. Bu durumda, bu 3 kuralın herhangi biri tarafından oluşturulan simgeleri referans almak için "WS" kullanılır. –
@SamHarwell son mod spesifikasyonunu ne sonlandırır? Bazı lexer doc'lerin, parça kullanımının parçalarını varsayılanları da dahil olmak üzere tüm modlarda kullanabildiğini gösterdiği son mod özelliğinin ardından parça def'leri olduğunu fark ettim. – bvj