CC Course 2005PmWiki |
Team Members
Project Status:
CharacteristicsInput Language: Subset of existing programming language Pascal (therefore with defined semantics) We used GNU Pascal version 20040516, based on gcc-3.4.4
Reserved Words:
Input Language in EBNF
letter = 'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'.
blank = ' '|CR LF|CR|LF.
String-element = ':'|'<'|'>'|'#'|';'|','|"."|"!"|"["|"]"|"("|")"|"\".
boolean = true|false.
digit = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'.
identifier = letter{ letter|digit} .
digit-sequence = digit {digit}.
sign = '+'|'-'.
integer = [sign] digit-sequence.
characterstring = letter|digit|string-element|blank {letter|digit|string-element|blank}.
string = "'" characterstring "'".
comment = "{" characterstring "}".
programheader = "program" identifier.
typedenoter = "integer"|"char"|"string"|"boolean".
identifierlist = identifier {"," identifier}.
variabledeclaration = identifierlist":" typedenoter.
variabledeclarationpart = ["var" variable-declaration ";" {variabledeclaration ";"}].
procedureidentifier = identifier.
procedureheading = "procedure" procedureidentifier [formalparameterlist].
procedureblock = block.
formalparameterlist = "(" [var] variable-declaration ";" { [var] variabledeclaration ";"} ")".
proceduredeclaration = procedureheading ";" procedureblock.
proceduredeclarationpart = {proceduredeclaration ";"}.
program = programheader ";" programblock ".".
block = variabledeclarationpart proceduredeclarationpart statementpart.
statementpart = "begin" statementsequence "end".
statementsequence = statement { ";" statement }.
statement = simplestatement|structuredstatement.
simplestatement = emptystatement|assignmentstatement|procedurestatement.
structuredstatement = compoundstatement|conditionalstatement|whilestatement.
emptystatement = .
assignementstatement = indentifier ":=" simpleexpression.
procedurestatement = procedureidentifier ().
conditionalstatement = "if" booleanexpression "then" statement [elsepart].
elsepart = "else" statement.
booleanexpression = simpleexpression [relationaloperator simpleexpression].
relationaloperator = "<"|">"|"="|"<="|">="|"<>".
addingoperator = "+"|"-".
mulitplyingoperator = "*"|"/".
simpleexpression = [sign] term {addingoperator term}.
term = factor {multiplyingoperator factor].
factor = integer| parseidentifier | "(" simpleexpression ")".
whilestatement = "while" booleanexpression "do" statement.
compoundstatenment = "begin" statementsequence "end".
program = programheading {procedure} programblock.
parseidentifier = identifier ['[' parseidentifier | integer ']' ] [ '^' ] ['.' parseidentifier ] [ '^' ]
array-type = 'array' '[' subrange-type { ',' subrange-type } ']' 'of' typedenoter .
subrange-type = parseidentifier '..' parseidentifier
record-type = 'record' field-list 'end' .
field-list = variabledeclaration { ';' variabledeclaration }.
Virtual Machine:Registers and Memory Our VM architecture provides 32 general-purpose registers of 32 bits each that are named R0 - R31. Two of these registers have special roles:
return address. Memory is 1024 Kbytes divided into words of 32 bits and is word-addressed. Runtime Environment In our case, the following rule applies (in addition to the special handling of R0 and R31):
Instruction Formats Instructions are 32 bits in length and start with a 6-bit opcode. The remaining bits depend on the nature of the opcode and follow one of three instruction formats that we call F1, F2, and F3.
Example Program
Downloads:
( Can be viewed with Dia ) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||