Twig: Как оценить выражение в строке? - PullRequest
0 голосов
/ 04 мая 2020

Общая цель, которую я имею, состоит в том, чтобы сгенерировать логическое выражение в (C -тиле), а также хочу создать таблицу истинности или нечто подобное.

У меня есть макрос в ветке, который генерирует логическое значение выражение случайно [например, (a && c) || ! b]

{% macro randomexpr(depth) %}
 {% from _self import randomexpr as expr %}
 {% if depth >= 5 %}{# Leaf nodes are random operands #}
     {{- random(["a", "b", "c", "d","!a", "!b", "!c", "!d"]) -}}
 {% else %}{# Internal nodes are of the form ( expr op expr ) #}
     {{- random(['(', '(', '!(']) -}}
     {{- expr(depth + 1 + random(3)) -}}
     {{- random(['||', '&&']) -}}
     {{- expr(depth + 1 + random(3)) -}}
     {{- ')' -}}
 {% endif %}
 {% endmacro %}

 {% import _self as exp %}
 { "expression": "{{ exp.randomexpr(0) }}"}

Я хотел бы оценить это выражение для всех комбинаций a, b, c и d.

Я создал второй макрос (таблицу), который загружает такое уравнение и преобразует выражение "C" в выражение "Twig". Но я новичок в Twig и не знаю, есть ли способ оценить это выражение ??

{% macro table() %} 
 {% set equation = exp.randomexpr(0) %}
 {{ equation }}
 {% set new_eq =  equation|replace({'!': 'not ', '&&': 'and', '&&': 'and', '||': 'or'}) %}
   {% for a in range(0, 1) %}
    {% for b in range(0, 1) %}
        {% for c in range(0, 1) %}
            {% for d in range(0, 1) %}
                {{ new_eq }}
            {% endfor %}
        {% endfor %}
    {% endfor %}
{% endfor %}
{% endmacro table%}

Но как я могу оценить new_eq с фактическими значениями для a, b, c, и д ??

...