Posts

Showing posts from December, 2011

The WeakReference class, monitoring memory leak and garbage collection in a Java application

Image
 Below is a Stack implementation that uses an internal resizeable array structure.  public class MyStack< T > implements Stack< T > { private static final int CAPACITY = 100 ; private Object[] array ; private int pos = 0 ; public MyStack () { this . array = new Object[ CAPACITY ] ; } @Override public void push ( T item) { if ( pos >= array . length / 2 ) { Object[] newArray = new Object[ pos * 2 ] ; System. arraycopy ( array , 0 , newArray , 0 , array . length ) ; array = newArray ; } array [ pos ++] = item ; } @Override public T pop () { if (isEmpty()) { throw new RuntimeException( "empty stack" ) ; } @SuppressWarnings ( "unchecked" ) T item = ( T ) array [ pos - 1 ] ; pos -= 1 ; return item ; } @Override @SuppressWarnings ( "unchecked" ) public T peek...

ANTLR ile Lexer Generation

Java platformunda bir lexer oluşturmak istediğimizde elimizdeki seçenekler JavaCC, SableCC ve ANTLR olarak karşımıza çıkıyor. ANTLR ile elimizdeki dil için bir lexer oluşturmaya çalışalım. Lexer için kullanacağımız dilin token kuralları: Identifier: Harf ile başlar. Harf, rakam ve alt çizgilerden oluşan stringdir. Büyük haft – küçük harf farklı olarak değerlendirilir. Integer constant: Rakamlardan oluşan string. Binary operator: Aşağıdakilerden biri: + - * / && Yorum: İki türlü yorum olabilir: Blok tipi yorum: /* */ Satır tipi yorum: // ANTLR kurulumu için yapılması gerekenler: Antlrworks'ü indir ve üzerine tıkla. En sevdiğin kafeinli içecek de dahil olmak üzere bilgilerini göndermeyi kabul et. ;) Yeni gramer dökümanı mı oluşturmak istiyorsun? Evet Grammar name: MyLexer Type: Lexer Lexical items: Identifier, Integer, Comments (single line + multiline), Whitespace Oluşturacağımız lexer için belirlenen kuralları ana pencerede görüyoruz: ID : ('a'..'z...

"REGULAR EXPRESSIONS" KONUSUNU TAM OLARAK VE KOLAYCA ANLAMAK

Herhangi bir dilde yazılmış bilgisayar programının derlenebilmesi veya yorumlanabilmesi için öncelikle "lexical analysis" denilen aşamadan geçmesi gerekiyor. Bu aşamada program kelimelere veya "token" denilen yapıtaşlarına ayrılıyor. Programlama dilinin sentaksı, tokenlerin türleri hakkında bilgi verir. Örneğin birçok dilde yer alan bazı token türleri: ID Örnek: price calculateRate lastItem NUM Örnek: 73 0 REAL Örnek: 12.5 0.23 COMMA , IF if Bir lexical analyser (lexer) yazabilmek için herhangi bir programlama dili kullanılabilir. Fakat özellikle "regular expressions" dili bu iş için kullanıma uygun. Regular Expressions Dil (language), bir string kümesi olarak tanımlansın. Örneğin Java dili, legal java programı oluşturabilecek tüm string lerin kümesidir. Bu durumda Java dili sonsuz elemana sahip bir küme. Peki bir dili (belki sonsuz elemana sahip), nasıl sonlu ifadelerle (açıklamalarla) tanımlayabiliriz? İşte burad...

nijhof2axon

Axon framework kullanıcılarına katkıda bulunmak amacıyla paylaştığım proje ile ilgili yorum ve sorular gelmeye başladı. http://code.google.com/p/nijhof2axon/ >>You share the Data between the Domain and the Query Model? When a command is dispatched, a CommandHandler uses the aggregate root to handle the command. Aggregate root fires DomainEvents. => Query layer related code listens to domain events and updates the query model. (Example: ClientTableUpdater) Domain entities are first class objects but Query Model classes are just DTOs with getters and setters. We have Client as entity and ClientDetailsEntry as DTO. >>The (generated?) table domainevententry looks like you can not replay events? missing the event data? To observe how events are replayed by the framework, you can follow these steps: Click on sample client change name stop server start server put a breakpoint to EventSourcingRepository.doLoad() method put a breakpoint to Client.handleClientNameChangedEvent() me...

Popular posts from this blog

Trie Data Structure and Finding Patterns in a Collection of Words

My Crappy Looking Solution to "Binary Tree Common Ancestor" Problem

A Graph Application in Java: Using WordNet to Find Outcast Words