Custom Language - NPeX-1/Shop2Go-REST GitHub Wiki

Osnova

Osnovna ideja našega jezika je opis ponudb (oglasov) izdelkov, kjerkoli po Sloveniji.

Konstrukti

Nevtralni element

Null

Niz

»Niz«

Realno število

32.325
32.325,12
0,123

Koordinate

( X , Y )

X in Y sta realni tevili.

Država

Najbolj zunanji blok, ki definira državo.

Ime-države { REGIONS }

Regija

Je v državi in definira regijo.

Ime-regije { LOCATIONS }

Kraj

Je v regiji in definira ponudbe, v njem je tudi blok za ukaze.

Ime-kraja {
OFFERS EXECBLOCK }

Ponudba

Je v kraju in definira vse podatke o artiklu/ponudbi, v njem je tudi blok za ukaze.

Ime-ponudbe {  
Title: Niz

Description: Niz

Price: Realno število

Exact-Location: Niz + Koordinate

Site-Type: SITETYPE

EXECBLOCK

}

Tip Strani

Določa vrsto strani, s katere je artikel.

AvtoNet | Bolha | Internal

Blok z ukazi

Vrne vrednost ukazov v ponudbe kot polje value.

<exec>; { UKAZI }

Ukazi

Spremenljivke

Ustvarita se lahko dve vrsti spremenljivk, to sta var in ret.

Var je vrednost, ki je uporabljena samo v bloku z ukazi, ret pa je vrednost, ki se bo vrnila in bo zapisana v polje value. Spremenljivke lahko vsebujejo koordinato, niz ali realno število. Imena spremenljivk so občutljive na velike in male črke.

Ponudba {  
...  
<exec> {  
var temp = 1  
ret Temp = 2  
Temp = Temp + temp  
}  
}

Ta primer bo na koncu izpisal:

Ponudba {  
...  
value: 3  
}

Matematični izrazi

Podprti so vsi osnovni matematični izrazi, to so: +, -, *, /, //, ^. Mogoče jih je zapisati več zaporedoma in z oklepaji.

Povprečna cena

Ukaz averagePrice(), vrne povprečno ceno vseh ponudb, ki imajo enako ime v lokaciji, če je izvedeno v bloku ponudbe in povprečno ceno vseh ponudb, če je izvedeno v bloku lokacije. Lahko pa kot parameter damo niz averagePrice(»Niz«), ki bo potem vrnil povprečno ceno ponudb z iskanim imenov, ki so na tej lokaciji.

Lokacija {  
<exec> {  
ret average = averagePrice()  
}  
}

Zgornja koda bo vrnila povprečno ceno vseh izdelkov na tej lokaciji.

Offer {  
<exec> {  
ret average = averagePrice()  
}  
}

Zgornja koda bo vrnila povprečno ceno izdelkov na tej lokaciji, ki imajo isto ime kot, je zapisano v polju title.

Lokacija {  
<exec> {  
ret average = averagePrice(»WV Golf«)  
}  
}

Zgornja koda bo vrnila povprečno ceno vseh izdelkov na tej lokaciji, ki v imenu vsebujejo WV Golf.

Štetje

Ukaz count(), ki je lahko samo v bloku lokacije, vrne število ponudb v tej lokaciji. Kot parameter iam alhko tudi niz, s katerim bo vrnilo vse ponudbe, ki se ujemajo z podabnim nizom. Iskani niz ni odvisen od velikih in malih črk, ter vrstem redu besed v nizu.

Lokacija {  
<exec> {  
ret count = count ()  
}  
}

Zgornja koda bo vrnila število vseh izdelkov na tej lokaciji.

Lokacija {  
<exec> {  
ret count = count (»WV Golf«)  
}  
}

Zgornja koda bo vrnila število vseh izdelkov na tej lokaciji, ki se ujemajo z iskanim nizom.

Osnovne funkcije

Jezik podpira nekaj osnovnih funkcij, kot so if, for in while. V funkcijah if in while je mogoče primerjati dve vrednosti po velikosti (večje, manjše).

Sintaksa:

if: if (primerjava) {  
Ukazi  
}

Ali

if (primerjava) {  
Ukazi  
} else {  
Ukazi  
}

Ali

if (primerjava) {  
Ukazi  
} else if (druga primerjava) {  
Ukazi  
}

itd...

for: for ( variable , celo število ) {  
Ukazi  
}

For se bo ponavljal, dokler spremenljivka na levi ne pride do vrednosti števila na desni.

while: while (primerjava) {  
Ukazi  
}

While se bo ponavljal, dokler primerjava velja.

Posebnosti

Povprečna cena

Ukaz averagePrice lahko sprožimo z znakom $.

Lokacija {  
<exec> {  
ret average = $  
}  
}

Zgornja koda bo vrnila povprečno ceno vseh izdelkov na tej lokaciji.

Offer {  
<exec> {  
ret average = $  
}  
}

Zgornja koda bo vrnila povprečno ceno izdelkov na tej lokaciji, ki imajo isto ime kot, je zapisano v polju title.

Lokacija {  
<exec> {  
ret average = $( "WV Golf ")  
}  
}

Zgornja koda bo vrnila povprečno ceno vseh izdelkov na tej lokaciji, ki v imenu vsebujejo WV Golf.

Štetje

Ukaz count lahko sprožimo z znakom ?.

Lokacija {  
<exec> {  
ret count = ?  
}  
}

Zgornja koda bo vrnila število vseh izdelkov na tej lokaciji.

Lokacija {  
<exec> {  
ret count = ?( "WV Golf ")  
}  
}

Zgornja koda bo vrnila število vseh izdelkov na tej lokaciji, ki se ujemajo z iskanim nizom.

Zapis

Zapis jezika sledi JSON-u, zato ga lahko, takrat ko se izvede, enostavno deserializiramo z obstoječimi JSON knjižnicami.

Evaluacija

Ko se evaluira execblock, se jezik še validira z JSON-om, da se preveri, če je pravilne oblike

Primeri kode

Primeri pravilne sintakse

Primer z enim izdelkom

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
}  
}  
}  
}

Primer z dvema izdelkoma

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
}  
izdelek{  
Title: "PS3"  
Description: "Priložene igre"  
Price: 70  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Internal  
}  
}  
}  
}

Primer z dvema izdelkoma in dvema lokacijama

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
}  
}  
Cezanjevci{  
izdelek{  
Title: "ficek"  
Description: "rabljeno"  
Price: 700  
Exact-Location: "Cezanjevci" (46.5197, 16.1504)  
Site-Type: AvtoNet  
}  
}  
}  
}

Primer z dvema izdelkoma z dveh regij

Slovenija{  
Prlekija{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
}  
}  
}  
Prekmurje{  
Murska-Sobota{  
avto{  
Title: "mazda 2"  
Description: "novo"  
Price: 12000  
Exact-Location: "Industrijska ulica 1" (46.6587348, 16.1723464)  
Site-Type: AvtoNet  
}  
}  
}  
}

Primer enega izdelka z blokom za ukaze v bloku izdelka

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
&lt;exec&gt;{  
var number = count()  
ret final = 0  
if (number > 0){  
final = 1  
}  
}  
}  
}  
}  
}

Primer enega izdelka z blokom za ukaze v bloku lokacije

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
}  
&lt;exec&gt;{  
var number = averagePrice("PS4")  
ret final = 120  
while (number < final){  
final = final - 10  
}  
}  
}  
}  
}

Primeri nepravilne sintakse

Primer enega izdelka z manjkajočim poljem za vrsto strani.

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
}  
}  
}  
}

Primer kjer manjkajo vsi podatki izdelka in je v bloku izdelka le blok za ukaze.

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
&lt;exec&gt;{  
var number = count("PS4")  
ret final = 0  
if (number > 0){  
final = 1  
}  
}  
}  
}  
}  
}

Primer kjer manjka celoten blok za izdelek in z blokom za ukaze pri lokaciji.

Slovenija{  
Pomurje{  
Ljutomer{  
&lt;exec&gt;{  
var number = averagePrice("PS4")  
ret final = 120  
while (number < final){  
final = final - 10  
}  
}  
}  
}  
}

Primer z dvema izdelkoma iz dveh regij, kjer pri enem od izdelkov manjka polje za lokacijo.

Slovenija{  
Prlekija{  
Ljutomer{  
izdelek{  
Title: "PS4"  
Description: "V dobrem stanju"  
Price: 120  
Exact-Location: "Ljutomer" (46.5194 , 16.1978)  
Site-Type: Bolha  
}  
}  
}  
Prekmurje{  
Murska-Sobota{  
avto{  
Title: "mazda 2"  
Description: "novo"  
Price: 12000  
Site-Type: AvtoNet  
}  
}  
}  
}

Primer z enim izdelkom, kjer so vsa polja izdelka narobe poimenovana.

Slovenija{  
Pomurje{  
Ljutomer{  
izdelek{  
Vsi: "PS4"  
So: "V dobrem stanju"  
Narobe: 120  
Poimenovani: "Ljutomer" (46.5194 , 16.1978)  
Spaghetti: Bolha  
}  
}  
}  
}
⚠️ **GitHub.com Fallback** ⚠️