Differences

This shows you the differences between two versions of the page.

Link to this comparison view

alf:teme:tema_en_5 [2020/05/06 14:46]
alexandru.radovici
alf:teme:tema_en_5 [2020/05/12 21:01] (current)
alexandru.radovici
Line 4: Line 4:
  
 <note important>​ <note important>​
-Deadline: **22nd of May, 23:55**\\+Deadline: **26nd of May, 23:55**\\
 Points: **2 points** out of the final grade\\ Points: **2 points** out of the final grade\\
 Upload the homework: [[https://​vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\ Upload the homework: [[https://​vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\
Line 11: Line 11:
 ===== What do you have to do ===== ===== What do you have to do =====
  
-The purpose of the homework is to translate an Alf Langauge provided as an AST file with semantic data into Web Assembly. Your program will receive two parameters: source file (the file from the previous homework, with the symbol table, the AST and the error list) and the output file. **You don't need a working version of homework 4!** The test files have already been generated and you can find them on [[https://​github.com/​alexandruradovici/​alf/​tree/​master/​Devoirs/​assembly/​verify/​assembly|github]].+The purpose of the homework is to translate an Alf Langauge provided as an AST file with semantic data into Web Assembly. Your program will receive two parameters: source file (the file from the previous homework, with the symbol table, the AST and the error list) and the output file. **You don't need a working version of homework 4!** The test files have already been generated and you can find them on [[https://​github.com/​upb-fils/​alf/​tree/​master/​Devoirs/​assembly/​verify/​assembly|github]].
 The programs will have any variable type. String concatenation is not provided (except for a few tests test). The programs will have any variable type. String concatenation is not provided (except for a few tests test).
  
 <code bash> <code bash>
-node main.js ​file.alf.json ​file.wat+node main.js ​fisier.alf.json ​fisier.alf.opt.json fisier.wat [optimisations,​]
 </​code>​ </​code>​
  
Line 68: Line 68:
  
 === String === === String ===
-The representation used for strings is Pascal and has a 256 bytes length:+The representation used for strings is Pascal ​type and has a 256 bytes length:
   * 1 byte for length   * 1 byte for length
   * 255 bytes for symbols   * 255 bytes for symbols
 +
 +{{ :​alf:​teme:​strings.png?​nolink&​300 |}}
  
  
Line 138: Line 140:
 Example: [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​4_branch/​local_variable.alf|local_variable.alf]] [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​4_branch/​local_variable.alf.wat|local_variable.alf.wat]] Example: [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​4_branch/​local_variable.alf|local_variable.alf]] [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​4_branch/​local_variable.alf.wat|local_variable.alf.wat]]
  
 +
 +==== Main Script ====
 +Your main script (''​script''​ section from the semnatic ast) will be the function in webassembly. The name of the function is up to you.
 +
 +==== Imports ====
 +Some of the functions in the symbol table have a parameter ''​use''​. This means that these functions are imported from the 
 +module declared in the ''​use''​ property.
 +
 +Example: [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​2_simple/​real_number.alf|2_simple/​real_number.alf]] [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​2_simple/​real_number.alf.json|real_number.alf.json]] [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​2_simple/​real_number.alf.wat|real_number.alf.wat]]
 +
 +==== Strings ====
 +All the string constants (values) are stored in the main memory right after the global variables. You can use ''​(data (i32.const address) "​\SSvalue"​)''​ where SS is the base16 value of the length. The first byte in the string represents the string'​s length.
 +
 +Example [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​1_variable_definition/​string.alf|string.alf]] [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​1_variable_definition/​string.alf.opt.json|string.alf.opt.json]] [[https://​github.com/​UPB-FILS/​alf/​blob/​master/​Devoir/​assembly/​verify/​assembly/​1_variable_definition/​string.alf.wat|string.alf.wat]]
  
 ===== Steps for writing the homework ===== ===== Steps for writing the homework =====
-  * Compute the allocation for each variable (variables sizes are described below) +  * Compute the allocation for each variable ​
-  * Allocate each local variable to a web assembly local variable+
   * Transform each AST element into the corresponding Web Assembly instruction(s)   * Transform each AST element into the corresponding Web Assembly instruction(s)
   * Transform each function (and its statements) into the corresponding Web Assembly instructions   * Transform each function (and its statements) into the corresponding Web Assembly instructions
  
-===== ASM in AST ===== +===== Bonus Optimization ​===== 
-To read and write from and to the screen, ​the following ​function, that are declared in Alf will not be transformed in WebAssembly but imported:+Implement ​the homework so that is does the following ​optimizations: 
 +  * constant folding 
 +  * delete unused variables and functions
  
-  * readint +For the bonus, there are two extra parameters in the command line 
-  * readfloat + 
-  * readchar +<code bash> 
-  * writeint +node main.js fisier.alf.json fisier.alf.opt.json fisier.wat [fold_constants] [unused] 
-  * writefloat +</​code>​
-  * writechar+
  
-===== Bonus ===== +<​note>​[] means that it is optional</​note>​
-Implement the homework so that is may use strings.+
  
 ===== Testing ===== ===== Testing =====
alf/teme/tema_en_5.1588765571.txt.gz · Last modified: 2020/05/06 14:46 by alexandru.radovici
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0