Derleyici yazmak (String üzerinde hızlı işlem)

Başlatan bunalmis, 28 Aralık 2009, 17:05:26

z

Delphi ile derleyici program yazıyorum.

Text dosyadan okunan kaynak kodlar yazdığım program tarafından dil kuralları testinden geçiriliyor ve yorumlanıyor.

Hata varsa hatanın nerede oldugu gosteriliyor.

Ancak yazdığım kodların yavaşlığından şikayetçiyim.

Aşağıdaki örnek satırlar aynı anlama geliyor ve hepsi de doğru.

G00 X100.000 Y100.000 Z100.000 F100.000 S100.00
G00 X100.000
G00 Y100.000 Z100.000 X100.000 F100.000 S100.00
G00X100.000Y100.000Z100.000F100.000S100.00
G0X100Y100.00      Z100.0 F100S100.00
G0X100Y100.00      Z100.0 F100

Asagıda ise hatalı örnekleri görüyorsunuz.

X100Y100.00 G0  Z100.0 F100S100.00  
G0 0X100Y100.00      Z100.0 F100S100.00
G 0X100Y100.00      Z100.0 F100S100.00
G0X1H00Y100.00      Z100.0 F100S100.00
G0X100Y100.00   G0   Z100.0 F100S100.00
G00X100.000Y100.000Z100..000F100.000S100.00

Program satır içinden

G=0
X=100
Y=100
Z=100
F=100
S=100

degerlerini çekip çıkartıyor.

Benim yaptığım, okunan satırı soldan sağa dogru taramak

Önce harf arıyor sonra sayısal kısmı buluyor

sayısal veri float tipi uyum testine giriyor

Ardından komutu tanımlayan kod (ornekte G00) için eksik yada fazla parametre var mı yokmu testi yapılıyor sonucta bu işlemler uzuyor gidiyor.


Örnek verdiğim kodlardan da görüleceği üzere veriler standart tipte değil.
Derlenecek kaynak kod 10 bin satır olabiliyor.

Yazılacak derleyicinin  hızlı koşması için assemly kodlama haricinde önerileriniz nelerdir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

controller

Bahsettiğiniz işlem yazılım dünyasında "lexical analysis", bu işi yapan yazılımlar da "lexical analyzer" olarak geçer. Bu işin nasıl hızlı bir şekilde yapıldığını öğrenmek için open source lexical analyzer kodlarını incelemek faydalı olabilir.

http://en.wikipedia.org/wiki/Lexical_analyzer

http://en.wikipedia.org/wiki/Lex_(software)
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.