Nasal-Interpreter/version0.11/bnf.bison

298 lines
5.4 KiB
Plaintext

%%
id
:IDENTIFIER
;
scalar
:number
|string
|char
|calculation
;
call
:call_list
|call_hash
|call_function
;
datas
:id,id
|id,scalar
|id,call
|id,function
|id,list
|id,hash
|scalar,id
|scalar,scalar
|scalar,call
|scalar,function
|scalar,list
|scalar,hash
|call,id
|call,scalar
|call,call
|call,function
|call,list
|call,hash
|function,id
|function,scalar
|function,call
|function,function
|function,list
|function,hash
|list,id
|list,scalar
|list,call
|list,function
|list,list
|list,hash
|hash,id
|hash,scalar
|hash,call
|hash,function
|hash,list
|hash,hash
|list,datas
|hash,datas
|id,datas
|scalar,datas
|call,datas
|function,datas
;
hash_member
:id:id
|id:scalar
|id:call
|id:function
;
hash_members
:hash_member,hash_member
|hash_member,hash_members
;
list
:[]
|[id]
|[scalar]
|[call]
|[function]
|[datas]
;
hash
:{}
|{hash_member}
|{hash_members}
;
call_list
:id list
|call list
|id[hash_member]
|call[hash_member]
|id[id:]
|id[scalar:]
|id[call:]
|call[id:]
|call[scalar:]
|call[call:]
;
call_hash
:id.id
|id.call
|id.scalar
|call.id
|call.call
|call.scalar
;
call_function
:id()
|id(id)
|id(scalar)
|id(call)
|id(list)
|id(hash)
|id(function)
|id(datas)
calculation
:id two_operator id
|id two_operator scalar
|id two_operator call
|scalar two_operator id
|scalar two_operator scalar
|scalar two_operator call
|call two_operator id
|call two_operator scalar
|call two_operator call
|(id)
|(scalar)
|(call)
|! id
|! scalar
|! call
|__add0 -id
|__add0 -scalar
|__add0 -call
|__add0 +id
|__add0 +scalar
|__add0 +call
;
two_operator
:+
|-
|*
|/
|~
|==
|>
|>=
|<
|<=
|!=
|and
|or
;
assignment_operator
:+=
|-=
|*=
|/=
|~=
;
function
:func{}
|func{statement}
|func{statements}
|func(){}
|func(){statement}
|func(){statements}
|func(id){}
|func(id){statement}
|func(id){statements}
|func(scalar){}
|func(scalar){statement}
|func(scalar){statements}
|func(call){}
|func(call){statement}
|func(call){statements}
|func(list){}
|func(list){statement}
|func(list){statements}
|func(hash){}
|func(hash){statement}
|func(hash){statements}
|func(function){}
|func(function){statement}
|func(function){statements}
|func(dynamic_id){}
|func(dynamic_id){statement}
|func(dynamic_id){statements}
|func(datas){}
|func(datas){statement}
|func(datas){statements}
choose
:if(id){}
|if(scalar){}
|if(call){statement}
|if(id){statement}
|if(scalar){statement}
|if(call){statement}
|if(id){statements}
|if(scalar){statements}
|if(call){statements}
|else if(id){}
|else if(scalar){}
|else if(call){statement}
|else if(id){statement}
|else if(scalar){statement}
|else if(call){statement}
|else if(id){statements}
|else if(scalar){statements}
|else if(call){statements}
|elsif(id){}
|elsif(scalar){}
|elsif(call){statement}
|elsif(id){statement}
|elsif(scalar){statement}
|elsif(call){statement}
|elsif(id){statements}
|elsif(scalar){statements}
|elsif(call){statements}
|else{}
|else{statement}
|else{statements}
loop
:while(id){}
|while(scalar){}
|while(call){}
|while(id){statement}
|while(scalar){statement}
|while(call){statement}
|while(id){statements}
|while(scalar){statements}
|while(call){statements}
|forindex|foreach(statement id){}
|forindex|foreach(statement scalar){}
|forindex|foreach(statement call){}
|forindex|foreach(statement list){}
|forindex|foreach(statement id){statement}
|forindex|foreach(statement scalar){statement}
|forindex|foreach(statement call){statement}
|forindex|foreach(statement list){statement}
|forindex|foreach(statement id){statements}
|forindex|foreach(statement scalar){statements}
|forindex|foreach(statement call){statements}
|forindex|foreach(statement list){statements}
|for(statement pre_assignment){}
|for(statement pre_assignment){statement}
|for(statement pre_assignment){statements}
definition
:var id = id;
|var id = scalar;
|var id = call;
|var id = list;
|var id = hash;
|var id = function;
|var id;
pre_assignment
:id = id
|id = scalar
|id = call
|id = function
|id = list
|id = hash
|call = id
|call = scalar
|call = call
|call = function
|call = list
|call = hash
|id assignment_operator id
|id assignment_operator scalar
|id assignment_operator call
|call assignment_operator id
|call assignment_operator scalar
|call assignment_operator call
;
assignment
:pre_assignment ;
;
return_scalar
:return id;
|return scalar;
|return call;
|return function;
|return list;
|return hash;
|return;
;
statement
:continue;
|break;
|return_scalar
|definition
|assignment
|loop
|choose
;