抽象语法树 - 新手级别(试图理解)

时间:2016-05-17 14:29:40

标签: syntax tree grammar abstract abstract-syntax-tree

所以我现在正在尝试学习AST并且练习了一些简单的功能,比如

var a;
var b;
b = 666
a = b;
print a;

结尾如下: Simple

所以在试图了解它之后。我几乎开始理解它,但是当我尝试做这样的功能时问题就出现了:

var a;
var b;
b = 666;
a = b+42*6;
print a;

我遇到麻烦的地方是a = b + 42 * 6我不知道应该如何制作树。我知道该怎么办,如果它们中只有一个像+或*,而不是当它们在一起时。我一直在尝试查看youtube剪辑,其他网站的教程等,但找不到任何类似的东西。

所以我需要你的帮助!

反正。我也有一个语法,但它看起来像图片:)

编辑:

Like this

我这样结束了。感觉不对......?

编辑2:

enter image description here

1 个答案:

答案 0 :(得分:1)

由于表达式为var array1 = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'a10', 'a11', 'a12']; var array2 = ['b1', 'b2', 'b3', 'b4']; var result = []; // Values to increase by var add = [7, 9]; var originalArray1Length = array1.length; if (array2.length) { for (var i = 0; i < array2.length; i++) { if (array1.length != 0) { // If we're on the first loop we increase by 3 otherwise we get the modulus of the loop // iteration and use it to reference the "add" array result = result.concat(array1.splice(0, i == 0 ? 2 : add[i % 2])); } result[result.length] = array2[i]; } } else result = array1; document.getElementById('result').innerText = result.join(',');,您必须先考虑如何自己动手。第一部分是<div id="result"></div>基于数学规则,所以你把它写成一个表达式(使用你使用的相同术语):

a = b + 42 * 6

此结果将添加到42 * 6,这是下一个:

    expr
   /  | \
  42  *  6

然后你想将它全部分配到b,所以添加:

    expr
   /  | \
   b  +  \
        expr
       /  | \
      42  *  6