Kotlin Language Features Related to Null Handling

Any software engineer with a Java background would find the null handling features in the Kotlin language interesting. Let's summarize this topic with some examples. Nullable types: In Kotlin, types are non-nullable by default. If you want a variable to be able to hold a null value, you need to explicitly declare its type as nullable using the Type? syntax. For example, String? denotes a nullable string, while String represents a non-nullable string. Safe calls (?.): Kotlin introduces the safe call operator (?.) for handling nullable types. It allows you to safely invoke a method or access a property on a nullable object. If the object is null, the expression returns null instead of throwing a NullPointerException. Example: data class Person(val name: String, val age: Int, val address: String?) fun main() {     // Create a person with a nullable address     val person1 = Person("John Doe", 25, "123 Main Street")     val person2 = Person("Jane Doe", 30,...

"Parsing" Konusu ile ilgili Temel Kavramlar

--Halen yazım aşamasında--

Regular expressions yardımıyla bir programın "lexical" yapısını ifade edebildiğimizi görmüştük. Aynı şeyi dildeki cümleler için yapmak mümkün mü?
Dildeki cümlelerin yapısını ifade etmek için "context free grammar" kavramı kullanılmakta.
Dildeki karmaşık yapıları oluşturmak için "production" yaparak ilerlemek gerekiyor. Aşağıda 5 tane production ile ifade edilen bir dili inceleyelim:


S -> S ; S
S -> ID = E
E -> E + E
E -> ID
E -> NUM


Bu kuralları kullanarak bir cümle üretmeye çalışalım:


S ; S
ID = E ; ID = E
ID = E + E; ID = E
ID = ID + NUM; ID = NUM


Burada ürettiğimiz cümlenin kaynak kodu (lexer ele almadan önce) şöyle olabilirdi:


var = i + 4; j = 5


Burada tokenlerin değerleri: var, i, j, 4, 5
Token türleri: ID, NUM, "+", ";", "="

Gramer ifadesinde sağ tarafta bulunamayan sonlanmış semboller dikkati çekiyor. Bunlara "terminal symbol" deniliyor. Terminal semboller, token türlerine karşılık gelmekte: ID, NUM
Gramer ifadesinde sol tarafta bulunan semboller ise üretim yapmaya olanak veriyor. Bunlara "nonterminal symbol" deniliyor. Nonterminal sembollerden birisiyle üretim yapmaya başlıyoruz ki bu sembole start symbol deniliyor.

Ambiguous Grammar


E -> E - E
E -> id
Bu gramer ile ilgili örnek bir cümle:

3 – 2 – 5

id - id - id


Bu cümleyi 2 farklı ağaç yapısı şeklinde gösterebiliyoruz:

E
|-----------------|
id +
|------------------|
id id

veya

E
|------------------|
+ id
|------------------|
id id


İşte bu şekilde birden fazla ağaç yapısı ile temsil edilebilen gramerlere çok anlamlı (ambiguous) deniliyor. Aynı ifade farklı anlamlara gelen ağaç yapılarıyla temsil edilebildiği için bu gramerler yorumlama açısından sorun yaratıyor.
Çok anlamlılığı ortadan kaldırmak için grameri değiştirmemiz gerekiyor:

E -> E – T
T-> (E)
E -> id

Bir sonraki yazıda, tasarladığımız bir dil için nasıl parser oluşturacağımız üzerinde duralım.

Comments

Popular posts from this blog

Trie Data Structure and Finding Patterns in a Collection of Words

Virtual Memory

NOTES ON COMPUTER ARCHITECTURE: Some important concepts in computer architecture