JakuJ / pseudoassembler-compiler

HPA to C compiler written for prof. Homenda's pseudoassembly language.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pseudoassembler-compiler

A compiler written for prof. Homenda's pseudoassembly language. Done entirely in Haskell using parsing combinators and some redundant lexing phases.

Formal grammar:

program ->  lines

lines   ->  lines line
        |   Epsilon

line    ->  Label allocation '\n'
        |   Label command '\n'
        |   Label '\n'

allocation  ->  declaration
            |   definition

declaration ->  'DS' 'INTEGER'
            |   'DS' Number '*' 'INTEGER'

definition  ->  'DC' 'INTEGER' '(' Number ')'
            |   'DC' Number '*' 'INTEGER' '(' Number ')'

command ->  move
        |   arithmetic
        |   compare
        |   jump

move    ->  'L' Register ',' address
        |   'LA' Register ',' address
        |   'LR' Register ',' address
        |   'ST' Register ',' address

arithmetic  ->  'A' Register ',' address
            |   'S' Register ',' address
            |   'M' Register ',' address
            |   'D' Register ',' address
            |   'AR' Register ',' address
            |   'SR' Register ',' address
            |   'MR' Register ',' address
            |   'DR' Register ',' address

compare ->  'C' Register ',' address
        |   'CR' Register ',' address

jump    ->  'J' Label
        |   'JZ' Label
        |   'JN' Label
        |   'JP' Label

address ->  Label
        |   Register
        |   Register '(' Number ')'
        |   Number

Register    -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
Number  -> (any non-negative number)
Label   -> (any uppercase identifier)

About

HPA to C compiler written for prof. Homenda's pseudoassembly language.

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:Haskell 100.0%