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:) :] ]| -> |[ or (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[: (:Id:)((:ParamValues?:)) :] ]| -> |[ handle-return apply (bound id[: (:Id:) :], eval-params[: (:ParamValues?:) :]) ]| to-funcons: |[ eval-exp[: ((:Exp:)) :] ]| -> |[ eval-exp[: (:Exp:) :] ]| // ## Handling expressions for function calls to-funcons: |[ eval-params[: :] ]| -> |[ list () ]| to-funcons: |[ eval-params[: (:Exp:) :] ]| -> |[ list (eval-exp[: (:Exp:) :]) ]| to-funcons: |[ eval-params[: (:Exp:),(:ParamValues:) :] ]| -> |[ cons (eval-exp[: (:Exp:) :], eval-params[: (:ParamValues:) :]) ]| // ## Ids to-funcons-lex: FCTDoubleQuoted(L-id(LEX-id(str))) -> FCTString( str) to-funcons: |[ id[: (:Id:) :] ]| -> |[ \"(:Id:)\" ]| // ## Integers and decimals to-funcons: |[ int-val[: 0 :] ]| -> |[ 0 ]| 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( str) to-funcons: |[ dec-val[: (:Dec:) :] ]| -> |[ decimal-natural (\"(:Dec:)\") ]|