packages feed

ruler-core-1.0: examples/RenameAttr.rul

{
{-# LANGUAGE BangPatterns #-}
module RenameAttr where

import Control.Monad.Error
}

data X
  con X
    chld : Y
  con X2
    c1 : Y
    c2 : Y

data Y
  con Y

itf X
  visit v
    inh ast :: X
    syn x :: Int

itf Y
  visit v
    inh ast :: Y
    syn z :: Int

datasem X
  clause X
    rename chld z to x
    invoke v of chld
    lhs.x = chld.x
  clause X2
    rename c1 z to x
    rename c2 z to x
    default x = sum

datasem Y
  clause Y
    lhs.z = 3