Fun call parsing fixed, but parsing waaaaay slower
This commit is contained in:
parent
cb1706242e
commit
88e0d15efd
@ -392,17 +392,25 @@ namespace langkit {
|
|||||||
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Arg_List);
|
Finish_Parse(Token_Type::Arg_List);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fail_Parse();
|
Fail_Parse();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Fun_Call() {
|
bool Fun_Call() {
|
||||||
|
bool retval = false;
|
||||||
|
|
||||||
Start_Parse();
|
Start_Parse();
|
||||||
|
|
||||||
if (Id(true) && Char('(') && (Arg_List() || true) && Char(')')) {
|
if (Id(true) && Char('(')) {
|
||||||
|
Arg_List();
|
||||||
|
retval = Char(')');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Fun_Call);
|
Finish_Parse(Token_Type::Fun_Call);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -429,6 +437,7 @@ namespace langkit {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Fail_Parse();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -450,6 +459,7 @@ namespace langkit {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Fail_Parse();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -462,6 +472,7 @@ namespace langkit {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
Fail_Parse();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -471,18 +482,20 @@ namespace langkit {
|
|||||||
|
|
||||||
Start_Parse();
|
Start_Parse();
|
||||||
|
|
||||||
|
if ( (retval = (Additive() && ((Str(">=", true) || Char('>', true) || Str("<=", true) || Char('<', true) || Str("==", true) || Str("!=", true))))) ) {
|
||||||
|
do {
|
||||||
retval = Additive();
|
retval = Additive();
|
||||||
while (retval && (Str(">=", true) || Char('>', true) || Str("<=", true) || Char('<', true) || Str("==", true) || Str("!=", true))) {
|
} while (retval && ((Str(">=", true) || Char('>', true) || Str("<=", true) || Char('<', true) || Str("==", true) || Str("!=", true))));
|
||||||
retval = Additive();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Comparison);
|
Finish_Parse(Token_Type::Comparison);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fail_Parse();
|
Fail_Parse();
|
||||||
|
return Additive();
|
||||||
}
|
}
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Additive() {
|
bool Additive() {
|
||||||
@ -490,18 +503,20 @@ namespace langkit {
|
|||||||
|
|
||||||
Start_Parse();
|
Start_Parse();
|
||||||
|
|
||||||
|
if ( (retval = (Multiplicative() && (Char('+', true) || Char('-', true)))) ) {
|
||||||
|
do {
|
||||||
retval = Multiplicative();
|
retval = Multiplicative();
|
||||||
while (retval && (Char('+', true) || Char('-', true))) {
|
} while (retval && (Char('+', true) || Char('-', true)));
|
||||||
retval = Multiplicative();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Additive);
|
Finish_Parse(Token_Type::Additive);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fail_Parse();
|
Fail_Parse();
|
||||||
|
return Multiplicative();
|
||||||
}
|
}
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Multiplicative() {
|
bool Multiplicative() {
|
||||||
@ -509,26 +524,20 @@ namespace langkit {
|
|||||||
|
|
||||||
Start_Parse();
|
Start_Parse();
|
||||||
|
|
||||||
|
if ( (retval = (Value() && (Char('*', true) || Char('/', true)))) ) {
|
||||||
|
do {
|
||||||
retval = Value();
|
retval = Value();
|
||||||
while (retval && (Char('*', true) || Char('/', true))) {
|
} while (retval && (Char('*', true) || Char('/', true)));
|
||||||
retval = Value();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Multiplicative);
|
Finish_Parse(Token_Type::Multiplicative);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fail_Parse();
|
Fail_Parse();
|
||||||
|
return Value();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The above can be shortened to this, but let's not get carried away :)
|
|
||||||
if (!(Start_Parse() && Id(true) && Char('(') && (Arg_List() || true) && Char(')') && Finish_Parse(Token_Type::Fun_Call))) {
|
|
||||||
Fail_Parse();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Expression() {
|
bool Expression() {
|
||||||
@ -536,29 +545,40 @@ namespace langkit {
|
|||||||
|
|
||||||
Start_Parse();
|
Start_Parse();
|
||||||
|
|
||||||
|
if ( (retval = (Comparison() && (Str("&&", true) || Str("||", true)))) ) {
|
||||||
|
do {
|
||||||
retval = Comparison();
|
retval = Comparison();
|
||||||
while (retval && (Str("&&", true) || Str("||", true))) {
|
} while (retval && (Str("&&", true) || Str("||", true)));
|
||||||
retval = Comparison();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval) {
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Expression);
|
Finish_Parse(Token_Type::Expression);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fail_Parse();
|
Fail_Parse();
|
||||||
|
return Comparison();
|
||||||
}
|
}
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Equation() {
|
bool Equation() {
|
||||||
|
bool retval;
|
||||||
Start_Parse();
|
Start_Parse();
|
||||||
if (LHS() && Char('=') && Expression()) {
|
|
||||||
|
if ( (retval = (Expression() && (Char('=', true)))) ) {
|
||||||
|
do {
|
||||||
|
retval = Expression();
|
||||||
|
} while (retval && (Char('=', true)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (retval) {
|
||||||
Finish_Parse(Token_Type::Equation);
|
Finish_Parse(Token_Type::Equation);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fail_Parse();
|
Fail_Parse();
|
||||||
return false;
|
return Expression();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user