Update
This commit is contained in:
parent
d5f9ce27c4
commit
2c578aa7df
|
@ -44,7 +44,10 @@ forindex(e;m)
|
|||
var e=2;
|
||||
}
|
||||
}
|
||||
|
||||
while((a>1) and (a<100))
|
||||
{
|
||||
a-=1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#define DYNAMIC_ID 10 // id...
|
||||
#define IF_HEAD 11 // if (
|
||||
#define ELSIF_HEAD 12 // elsif (
|
||||
#define WHILE_HEAD 13 // while (
|
||||
#define FAIL -1 //fail
|
||||
#define SCANEND -2 //complete scanning
|
||||
#define ERRORFOUND -3 //error occurred
|
||||
|
@ -190,7 +191,7 @@ class nasal_lexer
|
|||
}
|
||||
++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")
|
||||
syn=FUNC_HEAD;
|
||||
|
@ -198,6 +199,8 @@ class nasal_lexer
|
|||
syn=IF_HEAD;
|
||||
else if(__token=="elsif")
|
||||
syn=ELSIF_HEAD;
|
||||
else if(__token=="while")
|
||||
syn=WHILE_HEAD;
|
||||
__token+=source[ptr];
|
||||
++ptr;
|
||||
}
|
||||
|
@ -407,6 +410,8 @@ class nasal_lexer
|
|||
std::cout<<"( If head | ";
|
||||
else if(temp.type==ELSIF_HEAD)
|
||||
std::cout<<"( Elsif head | ";
|
||||
else if(temp.type==WHILE_HEAD)
|
||||
std::cout<<"( While head | ";
|
||||
std::cout<<temp.content<<" )"<<std::endl;
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -28,6 +28,7 @@ enum token_type
|
|||
__if,__elsif,__else,
|
||||
__if_head,__elsif_head,
|
||||
__continue,__break,__for,__forindex,__foreach,__while,
|
||||
__while_head,
|
||||
__call_list_head,__call_func_head,__func_head,
|
||||
//end of operators & reserve words
|
||||
__scalar,__data_list,__scalar_list,
|
||||
|
@ -67,11 +68,15 @@ cmp_seq par[]=
|
|||
{{__elsif_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,__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,__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},
|
||||
{{__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,__number,__equal,__id,__var}, __definition},
|
||||
{{__semi,__string,__equal,__id,__var}, __definition},
|
||||
|
@ -235,6 +321,21 @@ cmp_seq par[]=
|
|||
{{__semi,__list,__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,__number,__add_equal,__id}, __assignment},
|
||||
{{__semi,__string,__add_equal,__id}, __assignment},
|
||||
|
@ -431,6 +532,9 @@ void print_token(int type)
|
|||
case __while:
|
||||
context="while";
|
||||
break;
|
||||
case __while_head:
|
||||
context="while (";
|
||||
break;
|
||||
case __if:
|
||||
context="if";
|
||||
break;
|
||||
|
@ -645,6 +749,11 @@ class PDA
|
|||
{
|
||||
comp_stack.push(main_stack.top());
|
||||
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)
|
||||
print_main_and_comp();
|
||||
while(1)
|
||||
|
@ -736,6 +845,10 @@ class nasal_parser
|
|||
{
|
||||
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"))
|
||||
{
|
||||
if((*i).content=="for")
|
||||
|
|
Loading…
Reference in New Issue