Update
This commit is contained in:
parent
d5f9ce27c4
commit
2c578aa7df
|
@ -44,7 +44,10 @@ forindex(e;m)
|
||||||
var e=2;
|
var e=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
while((a>1) and (a<100))
|
||||||
|
{
|
||||||
|
a-=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#define DYNAMIC_ID 10 // id...
|
#define DYNAMIC_ID 10 // id...
|
||||||
#define IF_HEAD 11 // if (
|
#define IF_HEAD 11 // if (
|
||||||
#define ELSIF_HEAD 12 // elsif (
|
#define ELSIF_HEAD 12 // elsif (
|
||||||
|
#define WHILE_HEAD 13 // while (
|
||||||
#define FAIL -1 //fail
|
#define FAIL -1 //fail
|
||||||
#define SCANEND -2 //complete scanning
|
#define SCANEND -2 //complete scanning
|
||||||
#define ERRORFOUND -3 //error occurred
|
#define ERRORFOUND -3 //error occurred
|
||||||
|
@ -190,7 +191,7 @@ class nasal_lexer
|
||||||
}
|
}
|
||||||
++ptr;
|
++ptr;
|
||||||
}
|
}
|
||||||
else if((syn==RESERVEWORD) && ((__token=="func") || (__token=="if") || (__token=="elsif")) && (source[ptr]=='('))
|
else if((syn==RESERVEWORD) && ((__token=="func") || (__token=="if") || (__token=="elsif") || (__token=="while")) && (source[ptr]=='('))
|
||||||
{
|
{
|
||||||
if(__token=="func")
|
if(__token=="func")
|
||||||
syn=FUNC_HEAD;
|
syn=FUNC_HEAD;
|
||||||
|
@ -198,6 +199,8 @@ class nasal_lexer
|
||||||
syn=IF_HEAD;
|
syn=IF_HEAD;
|
||||||
else if(__token=="elsif")
|
else if(__token=="elsif")
|
||||||
syn=ELSIF_HEAD;
|
syn=ELSIF_HEAD;
|
||||||
|
else if(__token=="while")
|
||||||
|
syn=WHILE_HEAD;
|
||||||
__token+=source[ptr];
|
__token+=source[ptr];
|
||||||
++ptr;
|
++ptr;
|
||||||
}
|
}
|
||||||
|
@ -407,6 +410,8 @@ class nasal_lexer
|
||||||
std::cout<<"( If head | ";
|
std::cout<<"( If head | ";
|
||||||
else if(temp.type==ELSIF_HEAD)
|
else if(temp.type==ELSIF_HEAD)
|
||||||
std::cout<<"( Elsif head | ";
|
std::cout<<"( Elsif head | ";
|
||||||
|
else if(temp.type==WHILE_HEAD)
|
||||||
|
std::cout<<"( While head | ";
|
||||||
std::cout<<temp.content<<" )"<<std::endl;
|
std::cout<<temp.content<<" )"<<std::endl;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -28,6 +28,7 @@ enum token_type
|
||||||
__if,__elsif,__else,
|
__if,__elsif,__else,
|
||||||
__if_head,__elsif_head,
|
__if_head,__elsif_head,
|
||||||
__continue,__break,__for,__forindex,__foreach,__while,
|
__continue,__break,__for,__forindex,__foreach,__while,
|
||||||
|
__while_head,
|
||||||
__call_list_head,__call_func_head,__func_head,
|
__call_list_head,__call_func_head,__func_head,
|
||||||
//end of operators & reserve words
|
//end of operators & reserve words
|
||||||
__scalar,__data_list,__scalar_list,
|
__scalar,__data_list,__scalar_list,
|
||||||
|
@ -67,11 +68,15 @@ cmp_seq par[]=
|
||||||
{{__elsif_choose,__if_choose}, __choose},
|
{{__elsif_choose,__if_choose}, __choose},
|
||||||
{{__if_choose}, __choose},// ?
|
{{__if_choose}, __choose},// ?
|
||||||
|
|
||||||
{{__statement,__right_curve,__id,__semi,__id,__left_curve,__forindex}, __loop},
|
//{{__statement,__right_curve,__calculation,__while_head}, __loop},
|
||||||
|
{{__right_brace,__statement,__left_brace,__right_curve,__calculation,__while_head}, __loop},
|
||||||
|
{{__right_brace,__statements,__left_brace,__right_curve,__calculation,__while_head}, __loop},
|
||||||
|
|
||||||
|
//{{__statement,__right_curve,__id,__semi,__id,__left_curve,__forindex}, __loop},
|
||||||
{{__right_brace,__statement,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__forindex}, __loop},
|
{{__right_brace,__statement,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__forindex}, __loop},
|
||||||
{{__right_brace,__statements,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__forindex},__loop},
|
{{__right_brace,__statements,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__forindex},__loop},
|
||||||
|
|
||||||
{{__statement,__right_curve,__id,__semi,__id,__left_curve,__foreach}, __loop},
|
//{{__statement,__right_curve,__id,__semi,__id,__left_curve,__foreach}, __loop},
|
||||||
{{__right_brace,__statement,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__foreach}, __loop},
|
{{__right_brace,__statement,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__foreach}, __loop},
|
||||||
{{__right_brace,__statements,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__foreach}, __loop},
|
{{__right_brace,__statements,__left_brace,__right_curve,__id,__semi,__id,__left_curve,__foreach}, __loop},
|
||||||
|
|
||||||
|
@ -220,6 +225,87 @@ cmp_seq par[]=
|
||||||
{{__right_curve,__calculation,__left_curve}, __calculation},
|
{{__right_curve,__calculation,__left_curve}, __calculation},
|
||||||
{{__id,__nor_operator}, __calculation},
|
{{__id,__nor_operator}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__add_operator,__number}, __calculation},
|
||||||
|
{{__number,__add_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__add_operator,__number}, __calculation},
|
||||||
|
{{__number,__add_operator,__id}, __calculation},
|
||||||
|
{{__id,__add_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__sub_operator,__number}, __calculation},
|
||||||
|
{{__number,__sub_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__sub_operator,__number}, __calculation},
|
||||||
|
{{__number,__sub_operator,__id}, __calculation},
|
||||||
|
{{__id,__sub_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__mul_operator,__number}, __calculation},
|
||||||
|
{{__number,__mul_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__mul_operator,__number}, __calculation},
|
||||||
|
{{__number,__mul_operator,__id}, __calculation},
|
||||||
|
{{__id,__mul_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__div_operator,__number}, __calculation},
|
||||||
|
{{__number,__div_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__div_operator,__number}, __calculation},
|
||||||
|
{{__number,__div_operator,__id}, __calculation},
|
||||||
|
{{__id,__div_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__link_operator,__number}, __calculation},
|
||||||
|
{{__number,__link_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__link_operator,__number}, __calculation},
|
||||||
|
{{__number,__link_operator,__id}, __calculation},
|
||||||
|
{{__id,__link_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__cmp_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_equal,__calculation}, __calculation},
|
||||||
|
{{__number,__cmp_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_equal,__id}, __calculation},
|
||||||
|
{{__id,__cmp_equal,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__cmp_not_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_not_equal,__calculation}, __calculation},
|
||||||
|
{{__number,__cmp_not_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_not_equal,__id}, __calculation},
|
||||||
|
{{__id,__cmp_not_equal,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__cmp_less,__number}, __calculation},
|
||||||
|
{{__number,__cmp_less,__calculation}, __calculation},
|
||||||
|
{{__number,__cmp_less,__number}, __calculation},
|
||||||
|
{{__number,__cmp_less,__id}, __calculation},
|
||||||
|
{{__id,__cmp_less,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__cmp_less_or_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_less_or_equal,__calculation}, __calculation},
|
||||||
|
{{__number,__cmp_less_or_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_less_or_equal,__id}, __calculation},
|
||||||
|
{{__id,__cmp_less_or_equal,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__cmp_more,__number}, __calculation},
|
||||||
|
{{__number,__cmp_more,__calculation}, __calculation},
|
||||||
|
{{__number,__cmp_more,__number}, __calculation},
|
||||||
|
{{__number,__cmp_more,__id}, __calculation},
|
||||||
|
{{__id,__cmp_more,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__cmp_more_or_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_more_or_equal,__calculation}, __calculation},
|
||||||
|
{{__number,__cmp_more_or_equal,__number}, __calculation},
|
||||||
|
{{__number,__cmp_more_or_equal,__id}, __calculation},
|
||||||
|
{{__id,__cmp_more_or_equal,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__and_operator,__number}, __calculation},
|
||||||
|
{{__number,__and_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__and_operator,__number}, __calculation},
|
||||||
|
{{__number,__and_operator,__id}, __calculation},
|
||||||
|
{{__id,__and_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__calculation,__or_operator,__number}, __calculation},
|
||||||
|
{{__number,__or_operator,__calculation}, __calculation},
|
||||||
|
{{__number,__or_operator,__number}, __calculation},
|
||||||
|
{{__number,__or_operator,__id}, __calculation},
|
||||||
|
{{__id,__or_operator,__number}, __calculation},
|
||||||
|
|
||||||
|
{{__right_curve,__number,__left_curve}, __calculation},
|
||||||
|
{{__number,__nor_operator}, __calculation},
|
||||||
|
|
||||||
{{__semi,__calculation,__equal,__id,__var}, __definition},
|
{{__semi,__calculation,__equal,__id,__var}, __definition},
|
||||||
{{__semi,__number,__equal,__id,__var}, __definition},
|
{{__semi,__number,__equal,__id,__var}, __definition},
|
||||||
{{__semi,__string,__equal,__id,__var}, __definition},
|
{{__semi,__string,__equal,__id,__var}, __definition},
|
||||||
|
@ -235,6 +321,21 @@ cmp_seq par[]=
|
||||||
{{__semi,__list,__equal,__id,__var}, __definition},
|
{{__semi,__list,__equal,__id,__var}, __definition},
|
||||||
{{__semi,__hash,__equal,__id,__var}, __definition},
|
{{__semi,__hash,__equal,__id,__var}, __definition},
|
||||||
|
|
||||||
|
{{__semi,__calculation,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__number,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__string,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__id,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__char,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__right_brace,__left_brace,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__right_bracket,__left_bracket,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__call_function,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__call_list,__equal,__id}, __assignment},
|
||||||
|
{{__function,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__function,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__call_hash,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__list,__equal,__id}, __assignment},
|
||||||
|
{{__semi,__hash,__equal,__id}, __assignment},
|
||||||
|
|
||||||
{{__semi,__calculation,__add_equal,__id}, __assignment},
|
{{__semi,__calculation,__add_equal,__id}, __assignment},
|
||||||
{{__semi,__number,__add_equal,__id}, __assignment},
|
{{__semi,__number,__add_equal,__id}, __assignment},
|
||||||
{{__semi,__string,__add_equal,__id}, __assignment},
|
{{__semi,__string,__add_equal,__id}, __assignment},
|
||||||
|
@ -431,6 +532,9 @@ void print_token(int type)
|
||||||
case __while:
|
case __while:
|
||||||
context="while";
|
context="while";
|
||||||
break;
|
break;
|
||||||
|
case __while_head:
|
||||||
|
context="while (";
|
||||||
|
break;
|
||||||
case __if:
|
case __if:
|
||||||
context="if";
|
context="if";
|
||||||
break;
|
break;
|
||||||
|
@ -645,6 +749,11 @@ class PDA
|
||||||
{
|
{
|
||||||
comp_stack.push(main_stack.top());
|
comp_stack.push(main_stack.top());
|
||||||
main_stack.pop();
|
main_stack.pop();
|
||||||
|
if((comp_stack.top()==__id) && (!main_stack.empty()) && (main_stack.top()==__var)) // special LR(1)
|
||||||
|
{
|
||||||
|
comp_stack.push(main_stack.top());
|
||||||
|
main_stack.pop();
|
||||||
|
}
|
||||||
if(show)
|
if(show)
|
||||||
print_main_and_comp();
|
print_main_and_comp();
|
||||||
while(1)
|
while(1)
|
||||||
|
@ -736,6 +845,10 @@ class nasal_parser
|
||||||
{
|
{
|
||||||
temp_parse.type=__elsif_head;
|
temp_parse.type=__elsif_head;
|
||||||
}
|
}
|
||||||
|
else if((*i).type==WHILE_HEAD)
|
||||||
|
{
|
||||||
|
temp_parse.type=__while_head;
|
||||||
|
}
|
||||||
else if(((*i).content=="for") || ((*i).content=="foreach") || ((*i).content=="while") || ((*i).content=="forindex"))
|
else if(((*i).content=="for") || ((*i).content=="foreach") || ((*i).content=="while") || ((*i).content=="forindex"))
|
||||||
{
|
{
|
||||||
if((*i).content=="for")
|
if((*i).content=="for")
|
||||||
|
|
Loading…
Reference in New Issue