IBMEnterprise Japonca COBOL kaynak kodunu işliyoruz.Japonca COBOL Kodu: G değişmezleri ve tanımlayıcıları için kurallar?
G tipi değişmezlerde izin verilen neleri açıklayan kurallar, ve tanımlayıcılara neyin izin verildiği açık değildir.
IBM manuel G '....' literal tırnak içine ilk karakter, ve SHIFT-IN kapama tırnağına önceki son karakteri olarak bir SHIFT-OUT sahip olması gerektiğini belirtir. COBOL lexer'ımız bunu "bilir", ancak gerçek kodda bulunan G literals 'a nesneler. Sonuç: IBM kullanım kılavuzu yanlıştır, veya yanlış yorumluyoruz. Müşteri kodu görmemize izin vermeyecek, bu yüzden sorunu teşhis etmek oldukça zordur. Revize/netlik için metninin altında uzatıldı: DÜZENLEME
kimse G değişmez oluşumu, kesin kurallar biliyor mu ve nasıl IBM referans kılavuzları söylediklerine maç (yok)? İdeal cevap, G literal için düzenli bir ifade olur. Bu, biz (başka yazar tarafından kodlanmış, iç çekiyorum) artık kullanıyorsunuz budur: < adı> başka düzenli ifade olan bir makro olduğunu
#token non_numeric_literal_quote_g [STRING]
"<G><squote><ShiftOut> (
(<NotLineOrParagraphSeparatorNorShiftInNorShiftOut>|<squote><squote>|<ShiftOut>)
(<NotLineOrParagraphSeparator>|<squote><squote>)
| <ShiftIn> (<NotLineOrParagraphSeparatorNorApostropheNorShiftInNorShiftOut>|
<ShiftIn>|<ShiftOut>)
| <squote><squote>
)* <ShiftIn><squote>"
. Muhtemelen , yeterince iyi adlandırıldıkları için neyi içerdiğini tahmin edebilirsiniz.
İşte IBM Enterprise COBOL Reference. Bölüm 3 "Karakter Dizeleri", "DBCS hazırlıkları" alt başlığı "Sayfa 32" ilgili okumadır. Tam referansı sağlayarak, deneyimli bir IBM firmasının bize nasıl yanlış bir şekilde yol açtığımızı söyleyebilirim: - {"DBCS-karakterleri" ifadesinin " " ifadesinin ne zaman olduğunu söylerken özellikle "bir veya daha fazla karakter belirsizdir" X'00 ... X'FF aralığında her iki bayt için " DBCS karakterleri, 8 bit karakter kodlarının çiftleri dışında nasıl olabilir? Mevcut RE, incelediğinizde 3 karakter çiftiyle eşleşir.
Aşağıdaki yanıtlardan biri < squote> < squote> eşleşmesinin yanlış olduğunu göstermektedir. Tamam, buna inanabilirim, fakat bu, RE'nin sadece squote> s içeren literal dizeleri reddedeceği anlamına gelir. Ben bir G literalinin her bir örneğini gezdiğimiz gibi, 'un sahip olduğumuz problem olduğuna inanmıyorum.
Benzer şekilde, COBOL tanımlayıcıları DBCS karakterleri ile 'dan bağımsız olarak oluşturulabilir. Bir tanımlayıcı için tam olarak ne izin verilir? Yine düzenli bir ifade ideal olurdu.
EDIT2: Sorunun RE olmayabileceğini düşünüyorum. Shift-JIS kodlanmış metni okuyoruz. Okuyucumuz, metninin Unicode'a giderken dönüştürdüğünü. Ancak DBCS karakterleri, Shift-JIS değil, ; daha ziyade, ikili kodlanmış verilerdir. Muhtemelen olup bitenler, DBCS verilerinin Shift-JIS olduğu gibi çevrilir ve bu, DBCS elemanı olarak "iki bayt" tanımak için yeteneğini bozar.Örneğin, bir DBCS karakter çifti olsaydı, : 81: 1F, bir ShiftJIS okuyucusu bu çifti tek bir Unicode karakterine dönüştürür, ve iki bayt doğası kaybolur. Çiftleri sayamazsanız, son teklifini bulamazsınız. Son alıntıyı bulamadıysanız, , literalini tanıyamazsınız. Yani sorun, görünecektir ki, kodlama işlemlerinin orta giriş kodlama modlarını değiştirmemiz gerekir. Yuk.
Açılış veya kapanış teklifi olarak mı demek istiyorsunuz? Midstring'teki squote çifti, başlangıçta veya sonda değil, midstring'de bir squote'u temsil etmeyi amaçlamaktadır. Sözdizimini dikkatli bir şekilde kontrol edeceğim, ama emin misin? –
Belleğime göre, G-string'te ortadaki tırnak işaretinden kurtulmanıza gerek yok. N-string için, onu iki katına çıkarmanız gerekir, böylece kuralınız N-string içindir. El kitabımı yıllar önce attım, bu yüzden bunu doğrulamanın bir yolu yok. –
Ah, ışık şafağa doğru başlıyor. Size yardımcı olmak için, kılavuza işaret ettim, böylece tekrar okuyabilirsiniz grin; Ayrıca RE'yi yeniden yapılandırmayı daha kolay anladım ama değiştirmedim. Kılavuzlar, G literal'lerinde alıntı işaretleri konusunda oldukça sessizdir, ancak açıkça iki katına çıkarılması gerektiğini söylemez, bu yüzden o kısımda hakkınızı kabul edeceğim (kene!). Gözden geçirilmiş metinlerimle ilgili başka yorumlar var mı? –