Coco/R Taste example attributed grammar for use by the Swift-based Coco compiler generator.
Swift
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Taste.xcodeproj Project changes. Aug 11, 2017
Taste Delete README.md Aug 10, 2017
README.md Minor changes. Aug 11, 2017

README.md

Taste

Coco/R Taste example attributed grammar for use by my Swift-based Coco tool.

My version of the Taste compiler uses a Swift-like syntax and the attributed grammar file works with my Swift Coco tool.

The compiler tool produces machine code for a virtual machine that also runs in an included virtual simulator. Both tools were converted from the C# version available from the Coco/R repository at http://www.ssw.uni-linz.ac.at/Coco/

The included attributed grammar file taste.atg and the framework files are included.
New source files for the Taste compiler can be produced using these files and the Swift-based Coco tool.

The following example compiles and runs successfully using the Taste compiler/simulator:

// This is a test program which can be compiled by the Taste-compiler.
// It reads a sequence of numbers and computes the sum of all integers 
// up to these numbers.

program Test {
  var i: Int

  func Foo() {
    var a: Int; var b: Int; var max: Int
    read(a); read(b)
    if a > b { max = a } else { max = b }
    print(max)
  }

  func SumUp() {
    var sum: Int
    sum = 0
    while i > 0 { sum = sum + i; i = i - 1 }
    print(sum)
  }

  func Main() {
    read(i)
    while i > 0 {
      SumUp()
      read(i)
    }
  }
}

And here's the generated machine code output:

Parsing
Parsed correctly
  1: ENTER 3
  4: READ 
  5: STO 0
  8: READ 
  9: STO 1
 12: LOAD 0
 15: LOAD 1
 18: GTR 
 19: FJMP 31
 22: LOAD 0
 25: STO 2
 28: JMP 37
 31: LOAD 1
 34: STO 2
 37: LOAD 2
 40: WRITE 
 41: LEAVE 
 42: RET 
 43: ENTER 1
 46: CONST 0
 49: STO 0
 52: LOADG 0
 55: CONST 0
 58: GTR 
 59: FJMP 85
 62: LOAD 0
 65: LOADG 0
 68: ADD 
 69: STO 0
 72: LOADG 0
 75: CONST 1
 78: SUB 
 79: STOG 0
 82: JMP 52
 85: LOAD 0
 88: WRITE 
 89: LEAVE 
 90: RET 
 91: ENTER 0
 94: READ 
 95: STOG 0
 98: LOADG 0
101: CONST 0
104: GTR 
105: FJMP 118
108: CALL 43
111: READ 
112: STOG 0
115: JMP 98
118: LEAVE 
119: RET 

and the output given this input 3 5 100 0 :

6
15
5050