//-------------------------------------------------------------------//
//                                                                   //
// Traducción:                                                       //
//                                                                   //
//	- Literales                                                  //
//      - Identificador Atomico                                      //
//      - Acceso a miembros                                          //
//	- Asignacion						     //
//      - Has/Has Not                                                //
//      - Is/Is Not                                                  //
//	- Identico/No Identico					     //
//	- And/Or/Not						     //
//	- If/Else						     //
//      - While/Do-While					     //
//	- Break/Continue					     //
//      - Let                                                        //
//	- Return						     //
//	- Static						     //
//      - Secuencia                                                  //
//                                                                   //
//-------------------------------------------------------------------//

#include "../include/lang.inc"
#include "../include/system.inc"

objeto::object{
	funcion(x): x
	funcion(x,y): y
	funcion(x,y,z): z 
}

funcion(x): x
funcion(x,y): y
funcion(x,y,z): z 

expresion10 : 12345
expresion20 : true
expresion30 : null
expresion40 : false
expresion50 : 1.2345
expresion52 : []
expresion55 : [55]
expresion60 : [1,2,3,4,5]
expresion75 : 1;2;3;4;5
expresion80 : expresion10
expresion90 : funcion(expresion10)
expresion100: funcion(expresion10,expresion20)
expresion110: funcion(expresion10,expresion20,expresion30)
expresion120: objeto.funcion(expresion10)
expresion130: objeto.funcion(expresion10,expresion20)
expresion140: objeto.funcion(expresion10,expresion20,expresion30)
expresion150: objeto.funcion(expresion10).toString
expresion160: objeto.funcion(expresion10,expresion20).toString
expresion170: objeto.funcion(expresion10,expresion20,expresion30).toString
expresion180: let x=expresion10,y,z in x
expresion190: funcion(let x=expresion10,y,z in x)
expresion200: funcion(let x=expresion10,y,z in x,let x=expresion20,y,z in x)
expresion210: funcion(expresion10,expresion20,let x=expresion30 in expresion30)
expresion230: object has self
expresion240: object has not dummy
expresion250: boolean is object
expresion251: "xxx" is string
expresion252: [] is array
expresion253: ["a"] is array
expresion254: ["a"] is object
expresion260: boolean is not integer
expresion261: "xxx" is not string
expresion262: [] is not array
expresion263: ["a"] is not array
expresion270: let x=true,y=false in x===x
expresion280: let x=true,y=false in x!==y
expresion300: (let x=true in x)!==(let x=false in x)
expresion320: 2!==(let x=false in x)
//expresion330: return 10
//expresion340: return let x=10 in x
expresion350: if true then 1 else 2
expresion360: if false then 1
expresion370: if let x=true in x then 1 else 2
expresion380: if true then 1 else system.println("Este mensaje no debería mostrarse")
expresion385: if (let y in true) then let x=1 in x else system.println("Este mensaje no debería mostrarse")
expresion4xx(x): static x+1
expresion411: expresion4xx(10)
expresion412: expresion4xx(10);expresion4xx(20)
expresion420: not true
expresion430: not (let x=true in x)
expresion440: true and true
expresion450: true and false
expresion460: false and false
expresion465: false and system.println("este mensaje no debería mostrarse")
expresion470: true and (let x in true)
expresion480: (let x in true) and false
expresion490: (let x in false) and (let x in false)
expresion495: (let x in false) and system.println("este mensaje no debería mostrarse")
expresion540: true OR true
expresion550: true OR false
expresion560: false OR false
expresion565: TRUE OR system.println("este mensaje no debería mostrarse")
expresion570: true OR (let x in true)
expresion580: (let x in true) OR false
expresion590: (let x in false) OR (let x in false)
expresion595: (let x in true) OR system.println("este mensaje no debería mostrarse")
expresion600: let x=1 in while(x<5) do x=x+1;x
expresion610: let x=1 in while(5;x<5) do (5;x=x+1);x
expresion620: let x=1 in do x=x+1 while(x<5);x
expresion630: let x=1 in do (5;x=x+1) while(5;x<5);x
expresion640: let x=1 in while(true) do if x>=5 then break else x=x+1;x
expresion650: let x=1 in while(x<5) do (x=x+1;if x<10 then continue else x=x+7);x
expresion700: let x=10 in (x=x+1)
expresion701: let x=10 in (x=x+1);x

objeto7xx::object{
	var x:20
}

expresion710: objeto7xx.x=21
expresion711: objeto7xx.x
expresion720: let x=30 in objeto7xx.x=x+1
expresion721: objeto7xx.x

main:	
	system.println("expresion10    ":expresion10:" [12345]") 
	system.println("expresion20    ":expresion20:" [true]") 
	system.println("expresion30    ":expresion30:" [null]") 
	system.println("expresion40    ":expresion40:" [false]") 
	system.println("expresion50    ":expresion50:" [1.2345]") 
	system.println("expresion52    ":expresion52:" [[]]")
	system.println("expresion55    ":expresion55:" [[55]]") 
	system.println("expresion60    ":expresion60:" [[1,2,3,4,5]]") 
	system.println("expresion75    ":expresion75:" [5]") 
	system.println("expresion80    ":expresion80:" [12345]") 
	system.println("expresion90    ":expresion90:" [12345]") 
	system.println("expresion100   ":expresion100:" [true]")
	system.println("expresion110   ":expresion110:" [null]")
	system.println("expresion120   ":expresion120:" [12345]")
	system.println("expresion130   ":expresion130:" [true]")
	system.println("expresion140   ":expresion140:" [null]")
	system.println("expresion150   ":expresion150:" [12345]")
	system.println("expresion160   ":expresion160:" [true]")
	system.println("expresion170   ":expresion170:" [null]")
	system.println("expresion180   ":expresion180:" [12345]")
	system.println("expresion190   ":expresion190:" [12345]")
	system.println("expresion200   ":expresion200:" [true]")
	system.println("expresion210   ":expresion210:" [null]")
	system.println("expresion230   ":expresion230:" [true]")
	system.println("expresion240   ":expresion240:" [true]")
	system.println("expresion250   ":expresion250:" [true]")
	system.println("expresion251   ":expresion251:" [true]")
	system.println("expresion252   ":expresion252:" [true]")
	system.println("expresion253   ":expresion253:" [true]")
	system.println("expresion254   ":expresion254:" [true]")
	system.println("expresion260   ":expresion260:" [true]")
	system.println("expresion261   ":expresion261:" [false]")
	system.println("expresion262   ":expresion262:" [false]")
	system.println("expresion263   ":expresion263:" [false]")
	system.println("expresion270   ":expresion270:" [true]")
	system.println("expresion280   ":expresion280:" [true]")
	system.println("expresion300   ":expresion300:" [true]")
	system.println("expresion320   ":expresion320:" [true]")
	//system.println("expresion330   ":expresion330:" [10]")
	//system.println("expresion340   ":expresion340:" [10]")
	system.println("expresion350   ":expresion350:" [1]")
	system.println("expresion360   ":expresion360:" [null]")
	system.println("expresion370   ":expresion370:" [1]")
	system.println("expresion380   ":expresion380:" [1]")
	system.println("expresion385   ":expresion385:" [1]")
	system.println("expresion411   ":expresion411:" [11]")
	system.println("expresion412   ":expresion412:" [11]")
	system.println("expresion420   ":expresion420:" [false]")
	system.println("expresion430   ":expresion430:" [false]")
	system.println("expresion440   ":expresion440:" [true]")
	system.println("expresion450   ":expresion450:" [false]")
	system.println("expresion460   ":expresion460:" [false]")
	system.println("expresion465   ":expresion465:" [false]")
	system.println("expresion470   ":expresion470:" [true]")
	system.println("expresion480   ":expresion480:" [false]")
	system.println("expresion490   ":expresion490:" [false]")
	system.println("expresion495   ":expresion495:" [false]")
	system.println("expresion540   ":expresion540:" [true]")
	system.println("expresion550   ":expresion550:" [true]")
	system.println("expresion560   ":expresion560:" [false]")
	system.println("expresion565   ":expresion565:" [true]")
	system.println("expresion570   ":expresion570:" [true]")
	system.println("expresion580   ":expresion580:" [true]")
	system.println("expresion590   ":expresion590:" [false]")
	system.println("expresion595   ":expresion595:" [true]")
	system.println("expresion600   ":expresion600:" [5]")
	system.println("expresion610   ":expresion610:" [5]")
	system.println("expresion620   ":expresion620:" [5]")
	system.println("expresion630   ":expresion630:" [5]")
	system.println("expresion640   ":expresion640:" [5]")
	system.println("expresion700   ":expresion700:" [11]")
	system.println("expresion701   ":expresion701:" [11]")
	system.println("expresion710   ":expresion710:" [21]")
	system.println("expresion711   ":expresion711:" [21]")
	system.println("expresion720   ":expresion720:" [31]")
	system.println("expresion721   ":expresion721:" [31]")

	system.println("\nok?")