через if(22==22&&11==22) строка возврашает строка 22==22&&11==22 и проходит проверка по ней через парсер
function(string str) -> boolean { // if
            integer step = 0, n = 0, l = StringLength(str);
            string s = "", e = "", sParam = "", sValue = "";
            boolean bValue = false, bResult = true;
            
            while(n < l) {
                s = SubString(str, n, n + 1);
                e = SubString(str, n + 1, n + 2);
                
                if(step > 0 && s == " ") {
                
                } else if(step == 0) {
                    if(s == "=" && e == "=") {
                        n = n + 1;
                        step = 1;
                    } else {
                        sParam = sParam + s;
                    }
                } else if(step == 1) {
                    if(s == "|" && e == "|" && !bResult) {
                        step = 0;
                    } else if(s == "&" && e == "&" && bResult) {
                        bValue = bResult == bValue;
                        step = 0;
                    } else {
                        sValue = sValue + s;
                        bValue = sParam == sValue;
                        bResult = bResult == bValue;
                    }
                }
                
                n = n + 1;
            }
            
            return bResult;
        }
так правильно? Или что я упустил... а то голова не пашет как реализовать =)

Принятый ответ

  1. Условия типа bool1() and bool2(). Если bool1() ложь, то bool2() выполнятся не будет.
  2. Условия типа bool1() or bool2(). Если bool1() правда, то bool2() выполнятся не будет.
  3. JASS2 не шарит за приоритет операций, то есть bool1() or bool2() and bool3() имеет тот же результат, что и (bool1() or bool2()) and bool3().
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
28
5 лет назад
0
  1. Условия типа bool1() and bool2(). Если bool1() ложь, то bool2() выполнятся не будет.
  2. Условия типа bool1() or bool2(). Если bool1() правда, то bool2() выполнятся не будет.
  3. JASS2 не шарит за приоритет операций, то есть bool1() or bool2() and bool3() имеет тот же результат, что и (bool1() or bool2()) and bool3().
Принятый ответ
0
23
5 лет назад
0
и как реализовать так а то всю ночь намучал парсер ок. терь и проверку if =)
сначало я переношу текст где есть проверка и && как строка в случаем если встретим || то переносим строка проверку иначе результат получен.
function andValue(string str) -> boolean {
        цикл на проверки && и ==
        return false;
    }
    
    function onInit() {
        ParserCondition.create("if", function(string str) -> boolean { // if
            integer step = 0, n = 0, l = StringLength(str);
            string s = "", e = "", v = "";
            boolean bValue = false, bResult = false;
            
            while(n < l) {
                s = SubString(str, n, n + 1);
                e = SubString(str, n + 1, n + 2);
                
                if(step > 0 && s == " ") {
                
                } else if(step == 0) {
                    if (s == "|" && e == "|" && !bValue) {
                        bResult = true;
                        bValue = andValue(v);
                        v = "";
                    } else {
                        v = v + s;
                    }
                }
                
                n = n + 1;
            }
            
            if(bResult) {
                bValue = andValue(v);
            }
            
            return bValue;
        });
    }
Чтобы оставить комментарий, пожалуйста, войдите на сайт.