Skip to content

Latest commit

 

History

History
48 lines (42 loc) · 1.33 KB

README.md

File metadata and controls

48 lines (42 loc) · 1.33 KB

x is a variable literal
i is an integer literal
bool is a boolean value (true or false)
str is a string literal

Abstract Syntax:

type ::= int | bool | string | type => type</br >
unop ::= ! | - </br >
binop ::=  + | - | < | > | == | != </br >
exp ::= x | i | bool | str | unop exp | exp binop exp | x(exp*) | exp(exp) | (x*) => exp </br >
stmt ::= type x = exp; | </br >
	 x = exp; | </br >
	 if (exp) stmt else stmt | </br >
	 while (exp) stmt | </br >
	 print(exp*) | </br >
	 { stmt* } | </br >
program ::= stmt

for me to reference:
functionDef ::= type x((type, x)*)

Below is the more concrete-ish syntax pulled from my 430 lang with some changes

type ::= int | bool | string</br >
primary_exp ::= x | i | bool | str </br >
additive_op ::= + | - </br >
additive_exp ::= primary_exp (additive_op primary_exp)* </br >
comparison_op ::= < | > </br >
comparison_exp ::= additive_exp (comparison_op additive_exp)* </br >
equals_op ::= == | !=
equals_exp ::= comparison_exp (equals_op comparison_exp)* </br >
unary_op ::= ! | - </br >
unary_exp ::= unary_op equals_exp | equals_exp </br >
exp ::= unary_exp </br >
stmt ::= type x = exp; | </br >
	 x = exp; | </br >
	 if (exp) stmt else stmt | </br >
	 while (exp) stmt | </br >
	 print(exp*) | </br >
	 { stmt* } | </br >
	 exp </br >
program ::= stmt