Giter VIP home page Giter VIP logo

slj's Introduction

  • 👋 Hi, I’m @jkenda
  • 👀 I’m interested in high performance computing, game engine development, programming language development
  • 🖥️ Looking for work
  • 🌱 Finally learning touch typing

slj's People

Contributors

jkenda avatar

Watchers

 avatar

slj's Issues

Spremenljive/nespremenljive vrednosti, konstante

spr a = 1 
a **= 12
natisni(a)
# 13

naj b = 30 + a
b += 11 
# Napaka: b je nespremenljiva vrednost

kons c = 45 - (5 - 2)
natisni(c)
# 42

kons d = c - 3
natisni(d)
# 39

kons e = a - 6
# Napaka: vrednosti e ni mogoče izračunati vnaprej

Input

Ukaz, ki prebere znak, funkcija, ki bere do \n.

GETC
preberi() -> znak {
    vrni asm("GETC")
}

preberi(@[znak]) {
    za ... {
        ...
    }
}

Seznam naj ne vsebuje dolžine, pač pa naj jo vsebuje RefSeznama.

RefSeznama (@[znak]) naj bo ekvivalent sliceom v drugih jezikih.
@seznam naj vrne Referenco na seznam (@[znak, 64]), @seznam[1...-1] pa RefSeznama.

Indeksiranje v @[znak] ali @[znak; 64] naj vrne @znak.

funkcija preberi(medp: @[znak]) {
    za i = 0, i < medp.dolžina, i += 1 {
        medp[i]@ = preberi()
        če medp[i]@ == '\n' {
            vrni medp[...i]
        }
        vrni medp
    }
}
...

naj medp: [znak; 16]

naj niz = preberi(@medp[...])
# "medved"

natisni(niz)
# "medved"

natisni(medp)
# "medved          "

Napisano seveda velja za vse tipe in dolžine.

Referenca(seznam) = { seznam[0].naslov }
RefSeznama(seznam, od, dolžina) = { seznam[od].naslov, seznam.dolžina }

Implementacija ukazov za linux-x86_64

testiranje

  • NOOP
  • JUMP addr
  • JMPC addr
  • JMPD
  • ALOC mem
  • PUSH data
  • LOAD addr
  • LDOF addr
  • LDDY addr
  • STOR addr
  • STOF addr
  • STDY addr
  • TOP offset
  • PC offset
  • POS
  • ZERO
  • SOFF
  • LOFF
  • PUTC
  • GETC
  • ADDI
  • SUBI
  • MULI
  • DIVI
  • MODI
  • POWI
  • BOR
  • BXOR
  • BAND
  • BSLL
  • BSLR
  • ADDF
  • SUBF
  • MULF
  • DIVF
  • MODF
  • POWF
  • FTOI
  • ITOF

Strukture

Primer potencialne deklaracije strukta in implementacije njegovih funkcij:

strukt Seznam {
    _seznam: @[celo]
    dolžina: celo
}

funkcija Seznam(pomnilnik: @[celo]) -> Seznam {
    vrni Seznam {
        _seznam: pomnilnik,
        dolžina: 0,
    }
}

funkcija kapaciteta(seznam: @Seznam) -> celo {
    vrni seznam._seznam.dolžina
}

funkcija dolžina(seznam: @Seznam) -> celo {
    vrni seznam.dolžina@
}

funkcija dodaj(seznam: @Seznam, elem: celo) -> bool {
    če seznam.dolžina@ == seznam._seznam.dolžina {
        vrni laž
    }
    seznam._seznam[seznam.dolžina@]@ = elem
    seznam.dolžina@ += 1
    vrni resnica
}

funkcija odstrani(seznam: @Seznam) -> bool {
    če seznam.dolžina == 0 {
        vrni laž
    }
    seznam.dolžina@ -= 1
    vrni resnica
}

funkcija vzemi(seznam: @Seznam, i: celo) -> celo {
    vrni seznam._seznam[i]@
}

natisni(seznam: @Seznam) {
    naj dolžina = dolžina(seznam)
    za i = 0, i < dolžina - 1, i += 1 {
        natisni!(vzemi(seznam, i), ' ')
    }
    natisni(vzemi(seznam, dolžina - 1))
}

...

naj pomnilnik: [celo; 1_000_000]
naj seznam = Seznam(@pomnilnik[..])

za i = 1, i <= 10, i += 1 {
dodaj(@seznam, i)
}

natisni(@seznam)

1 2 3 4 5 6 7 8 9 10

Funkcija asm(...) za pisanje inline assemblerja.

Če bo možno, naredi tako, da razbere, kateri tip vrne, drugače omogoči, da tip navedemo.

naj z = asm("GETC")
asm("PUSH 'd'
     PRTC")

ali

naj z = asm(znak, "GETC")

V prvem primeru ne bi bilo možno pisati takega assemblerja, ki bi pustil manjši stack kot na začetku, pa tudi v drugem primeru, če hočemo, da je tip vračanja realen.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.