A Joyce programozási nyelv

Kifejezések

Expression =
SimpleExpression | SimpleExpression RelationOperator SimpleExpression
RelationOperator = "<" | "=" | ">" | "<=" | "<>" | ">="

Egy kifejezés egy előírást ad egy meghatározott típus egy értékének kiszámítása. Egy kifejezés értéke vagy egy egyszerű kifejezés értéke vagy azaz érték amit két egyszerű kifejezés értékéből kapunk , ha alkalmazunk rá egy operátort a megadottak közül.

  1. ha x és y integer ( vagy valós) operandusok, akkor az x < y kifejezés értéke igaz, ha x kisebb, mint y, egyébként hamis. Ha x és y ugyanazon egyszerű típus elemei akkor az x < y kifejezés értéke azonos az integer(x) < integer(y) kifejezés értékével.
    A többi kifejezés definíciója hasonlóan adható meg.
  2. ha x és y operandusok típusa azonos, ami felsorolási ( vagy rekord) típus, akkor a következő kifejezések logikai típusú értékeket jelentenek.
    x = y és x <> y
    x=y értéke igaz, ha x és y azonos elemek (vagy mezők) sorozatából áll, egyébként hamis. Az x <> y értéke azonos a not( x= y) kifejezés értékével.
  3. ha x és y string operandusok és azonos típusúak, akkor a következő logikai típusú értékeket jelentenek.
    x < y x = y x > y x <= y x <> y x >=y
    Megvizsgálja az x és y elemeit az indexeik sorrendjében. Addig, amíg el nem éri a legnagyobb indexet vagy az első olyat, amire x[i]<>y[i], és veszi ezt az i indexet.
    Az x < y értéke ebben az esetben az x[i]
  4. ha x és y azonos port típusú operandusok, akkor a következő kifejezések logikai típusú értékeket jelentenek.
    x=y és x <>y
    Az x=y értéke igaz, ha x és y ugyanazt a csatornát jelöli ( vagy a nil értéket) egyébként hamis. Az x <> y értéke azonos a not(x=y) értékével.

Példa
x=1 x > 0 s<> str("edit") imp = nil stream

Egyszerű kifejezések

SimpleExpression = Term | SingOperator Term | SimpleExpression AddingOperetor Term
SingOperator = '+' | '-'
AddingOperator = '+' | '-' | "or"

  1. ha x és y integer operandusok, akkor a következő egyszerű kifejezések is integer értékeket jelentenek
    +x identitás
    -x komplementer
    x+y összeadás
    x-y kivonás
    ha x és y valós operandusok akkor a fenti kifejezések valós értékeket jelölnek.
  2. ha x és y logikai típusú, akkor a az alábbi egyszerű kifejezés logikai értéket jelöl.
    x or y diszjunkció
    Az értéke igaz, ha x vagy x értéke igaz, egyébként hamis.

Termek

Term = Factor | Term MultiplyingOperator Factor
MultiplyingOperator = "*" | "/" | "div" | "mod" | "and"

  1. Ha x és y integer operandusok, akkor a következő termek integer értékeket jelölnek.
    x*y szorzás
    x div y osztás (egészrész)
    x mod y osztás (maradék)
    A következő reláció az osztás során fenn áll.
    x = ( x div y) * y + (x mod y)
  2. Ha x és y valós típusú, akkor a következő term valós értéket jelöl.
    x*y szorzás
    x/y osztás
  3. Ha x és y logikai típusú opernadusok, akkor
    x and y
    is logikai értéket jelöl.
    Az értéke igaz, ha x és y mindkettő igaz, egyébként hamis,.

Factorok

Factor= Constant | Variableretrial | Constructor | "(" Expression ")" | "not" Factor

Ha x logikai típusú operandus, akkor a
not x
logikai értéket is jelöl.
Az érték igaz, ha x értéke hamis, egyébként hamis.

Példa

10 x (x+1) not more

Változó értéke

Variableretrieval = VariableAccess

A változó értékét jelöli, ha meg nincs érték a változóhoz rendelve, akkor nincs definiálva az értéke.

Típuskontrukciók

Constructor= TypeName "(" ConstructorOperand ")"
ConstructorOperand = Expression | StringToken
StringToken = """ {GraphicCracter } """

  1. Ha x egyszerű operandus, akkor a konstruktor az integer (x) által meghatározott x integer értéket jelenti.
  2. Ha x egyszerű operandus, és T egy ismert (beépített) egyszerű típus, akkor a T(x) konstrukció a T típus azon egyszerű értékét jelenti, ami az integer(x) értéknek felel meg.
  3. Ha x integer operandus akkor a real (x) az x-nek megfelelő valós értéket jelöli.
  4. Ha x valós operandus akkor integer(x) az x-nek megfelelő integer értéket jelöli.
  5. Ha x string operandus és T egy ismert string típus, akkor a T(x) egy T típusú stringet jelöl. Ha |T| > |x| , akkor a T(x) tartalmazza az x-t és utána meg |T|-|x| darab null karaktert, egyébként ax x első |T| darab karakterét. A null karakter a char(0)-val egyenlő.

Példák
char(x+integer('0')) real(2) integer(e) str("This is a string of type str")