Code Monkey home page Code Monkey logo

enkelt-dev's Introduction

Enkelt

Codacy Badge CircleCI

Enkelt är världens första svenskspråkiga programmeringsspråk, och det perfekta valet för programmeringsundervisning på svenska.

Information om Enkelt-Dev

Här sker Enkelts utveckling, om du letar efter själva projektet hittar du det här.

Dokumentation hittas på: enkelt.edvard.dev.

Vi leter efter bidragsgivare! Om du vill bidra kan du läsa CONTRIBUTING.md för mer information.

Personer som arbetar/arbetat på Enkelt

(lägg till ditt namn om du jobbar/jobbat på enkelt)

  • Edvard Busck-Nielsen (Upprätthållare)
  • Morgan Williams (2019)
  • Bangyen Pham (2020)

Teknisk information

  • Licens: GNU GPLv3
  • Språk: Python (3)
  • CI/CD: Circle-CI

Kom igång

  • Klona projektet
  • Du kan använda dig av Exempel/test.e -filen för att testa olika saker
  • Kör Enkelt så här: python3 enkelt.py Exempel/test.e
  • För att få mera information om vad som händer i bakgrunden kan du använda dig av --d flaggan när du kör enkelt:
    • python3 enkelt.py Exemple/test.e --d

enkelt-dev's People

Contributors

bangyen avatar buscedv avatar codacy-badger avatar mogzhey avatar morganwillsdev avatar sourcery-ai[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

enkelt-dev's Issues

Add finally {}

Finally {} -> slutligen {} should be added

Ex.

försök {
  kasta ([errormeddelande])
}

fånga $[errorvariabel] {
  ...
}
slutligen {
  ...
}

Add .keys() function

.keys() for dictionaries (lexikon) should be added -> .nycklar()

Ex.

$lexikon = {"a": "alpha", "b": "beta"}
skriv ($lexikon.nycklar())

Output:

['a', 'b']

Datum & Tid

Lägg till funktioner för datum och tid.

Lägg till klasser

Enkelt borde kunna användas för att skriva objektorienterad kod, dvs. klasser.

Exempel (kod):

klass MinKlass {
     $text = ''
     def __init__($själv, $text) {
         $själv.$text = $text
     }
    def text($själv) {
        returnera $själv.$text
    }
}

$textobjekt = MinKlass("Hej")
skriv ($textobjekt.text())

(Utdata)

Hej

Enkelt "PIP"

Enkelt alternativ för pip, för att importera/installera externa bibliotek.

Fixa tom rad i kod bug

Man kan inte ha tomma rader i .e filen. Lägg till en if-sats som kollar om rader är tom innan den lexar och parsar

Add lambda functions

Lambda -> pilfunktion

Syntax (declaration):

$[variable] => ([comma separated parameters]) {...}

Syntax (usage):

$[variable]([comma separated values])

Example:

$var => ($a, $b) {$a + $b}
skriv ($var(1, 2))

Output:

3

Rethink/Redesign lib.py

Lib (recursive acronym for: "lib installerar bibliotek").
It either needs to be published or integrated in some way, it currently only lives in the Enkelt-Dev repo, but it's finished and works.

Add try and catch

Try, Catch & Throw should be integrated.

Ex.

försök {
  kasta ([errormeddelande])
}

fånga $[errorvariabel] {
  ...
}

TODO:

  • Notation for "försök" & "fånga" (very similar to "klass")
  • Add the "kasta()" function.

New Importing "Mode"

A new "mode" importing libraries or creating libraries (which one hasn't been decided yet), popular (or built-in) Python libraries should be translated and uploaded to bibliotek.enkelt.io, currently, however, this is not possible scince you can't run vanilla Python code in Enkelt. A new mode/feature is required for this use case.
Here are a few possibilities:

  1. Create basically an eval() equivalent that can run python code in Enkelt (not the best way).
  2. Create a "mode" of sorts, libraries can take/enable that basically makes them "normal" python modules that do not get transpiled when imported into Enkelt script, instead, they just get merged with final_transpiled in the final step of the transpiler.

Escaping with \

You should be able to ex. escape quotes inside strings with \

Ex.

$var = "echo \"text\""
skriv ($var)

Output:

echo "text"

Lägg till enumrate() -> numrera()

För-loopen behöver enumerate() funktionen:

$lista = ["a", "b", "c"]
för $index, $element, inom numrera($lista) {
    skriv($element)
    skriv($lista[$index])
}

Utdata:

a
a
b
b
c
c

Fix UNIT TESTs!

The Unit Tests are currently broken (due to the introduction of try and catch), but they are not written in a very scalable way and lot's of manual work is required if you update/add a part of/to the lexer or parser etc...

The Unit Tests should be more automated,

Mera unittest

Lägg till unittest för alla nya funktioner och funktioner i själva koden.

Göm/Ta bort final_transpiled -filen

Just nu sparas den temporära final_transpiled -filen, den ska antingen tas bort (helst) eller gömmas, alltså så ska den byta namn till .final_transpiled

Refactoring - Gör Enkelt.py "bättre"

Enkelt.py måste skrivas om så att b.la. testning blir enklare.

För tillfället finns det helt för mycket kod som gör samma sak på flera olika platser, de borde konverteras till funktioner som kan återanvändas.

Refactoring:

  • Fler (mer specifika) funktioner
  • Klarare kod
  • Enklare att förstå

Delar som behöver refactoring:

  • lex() -funktionen,
  • parse() -funktionen, ✔️
  • main() -funktionen ✔️

Lägg til dictionaries --> lexikon

Enkelt behöver lexikon (dictionaries), ex.

$lex = {"a": alpha, "b": beta, "c": gamma}
skriv ($lex["a"]
skriv ($lex["c"])

Utdata

alpha
gamma

Längd() fungerar inte för listor

längd() ger inte ut antalet element i en lista utan ger ut längden som en sträng (antalet tecken)

Ex.

$var = ["a", "b"]
skriv (längd($var))

Förväntad utput: 2
utput: 10

Ta bort ; i för-loopar

För-loopar borde deklareras:

för ($i inom området(0,10)) {
}

och inte:

för ($i; inom området(0,10)) {
}

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.