Files
IBAFLang/IBAF-Editor/trans/cbs-gen/IBAF-Expressions.str
2023-11-18 11:18:25 +01:00

101 lines
2.6 KiB
Plaintext

module IBAF-Expressions
imports
libstratego-gpp
signatures/-
pp/IBAF-parenthesize
pp/IBAF-pp
imports
// Language "IBAFlang"
rules
// # 1: General expressions
to-funcons:
|[ eval-exp[: (:Id:) :] ]| ->
|[ assigned (bound (id[: (:Id:) :])) ]|
to-funcons:
|[ eval-exp[: (:Int:) :] ]| ->
|[ int-val[: (:Int:) :] ]|
to-funcons:
|[ eval-exp[: true :] ]| ->
|[ true ]|
to-funcons:
|[ eval-exp[: false :] ]| ->
|[ false ]|
to-funcons:
|[ eval-exp[: (:Exp1:)+(:Exp2:) :] ]| ->
|[ int-add (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)-(:Exp2:) :] ]| ->
|[ integer-subtract (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)*(:Exp2:) :] ]| ->
|[ int-mul (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)/(:Exp2:) :] ]| ->
|[ checked int-div (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)%(:Exp2:) :] ]| ->
|[ checked int-mod (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)&&(:Exp2:) :] ]| ->
|[ and (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)||(:Exp2:) :] ]| ->
|[ and (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)==(:Exp2:) :] ]| ->
|[ is-equal (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)>=(:Exp2:) :] ]| ->
|[ is-greater-or-equal (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)>(:Exp2:) :] ]| ->
|[ is-greater (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)<=(:Exp2:) :] ]| ->
|[ is-less-or-equal (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: (:Exp1:)<(:Exp2:) :] ]| ->
|[ is-less (eval-exp[: (:Exp1:) :],
eval-exp[: (:Exp2:) :]) ]|
to-funcons:
|[ eval-exp[: ((:Exp:)) :] ]| ->
|[ eval-exp[: (:Exp:) :] ]|
to-funcons-lex:
FCTDoubleQuoted(L-id(LEX-id(str))) ->
FCTString(<double-quote> str)
to-funcons:
|[ id[: (:Id:) :] ]| ->
|[ \"(:Id:)\" ]|
to-funcons:
|[ int-val[: (:Dec:) :] ]| ->
|[ dec-val[: (:Dec:) :] ]|
to-funcons:
|[ int-val[: -(:Dec:) :] ]| ->
|[ integer-negate (dec-val[: (:Dec:) :]) ]|
to-funcons-lex:
FCTDoubleQuoted(L-decimal(LEX-decimal(str))) ->
FCTString(<double-quote> str)
to-funcons:
|[ dec-val[: (:Dec:) :] ]| ->
|[ decimal-natural (\"(:Dec:)\") ]|