git @ Cat's Eye Technologies Bhuna / master doc / bhuna.txt
master

Tree @master (Download .tar.gz)

bhuna.txt @masterraw · history · blame

Program		::= {Statement}.
Block		::= Statement | "{" {Statement} "}".
Statement	::= (Definition | Assignment | Command | Control | Block) [";"].

Definition	::= {"local" | "const"} Var "=" Expr<0>.		[[1]]
Assignment	::= Var {LAccessor} "=" Expr<0>.
Command		::= Var {LAccessor} Expr<0> {"," Expr<0>}.

Control		::= "if" Expr<0> Block ["else" Block]
		  | "while" Expr<0> Block
		  .

Expr<N>		::= Expr<N+1> {Op<N> Expr<N+1>}.
Expr<4>		::= Primitive.

Op<0>		::= "&" | "|".
Op<1>		::= ">" | "<" | ">=" | "<=" | "=" | "!=".
Op<2>		::= "+" | "-".
Op<3>		::= "*" | "/" | "%".

Primitive	::= "(" Expr<0> ")"
		  | "!" Primitive
		  | Var {RAccessor}
		  | "^" {Var [","]} Block
		  | "[" [Expr<0> {"," Expr<0>}] "]"
		  | Literal
		  .

Literal		::= <<symbol>>						[[3]]
		  | <<number>>
		  .

Var		::= <<symbol>>.						[[4]]

LAccessor	::= "[" Expr<0> "]"
		  | "." Literal
		  .

RAccessor	::= "[" Expr<0> "]"
		  | "." Literal
		  | "(" [Expr<0> {"," Expr<0>}] ")"
		  .

Footnotes:

[[1]]:  Var must not itself be mentioned in the Expr<0>.
[[3]]:	Must start with lowercase letter.
[[4]]:	Must start with Uppercase letter.