Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何跟踪迭代(非递归)函数上的嵌套信息_Algorithm_Parsing_Recursion_Data Structures_Stack - Fatal编程技术网

Algorithm 如何跟踪迭代(非递归)函数上的嵌套信息

Algorithm 如何跟踪迭代(非递归)函数上的嵌套信息,algorithm,parsing,recursion,data-structures,stack,Algorithm,Parsing,Recursion,Data Structures,Stack,假设我有一个定义了一堆嵌套规则的 Expr ← Sum Sum ← Product (('+' / '-') Product)* Product ← Value (('*' / '/') Value)* Value ← [0-9]+ / '(' Expr ')' 说我是对的● 这里是过程中的第二个值: Expr ← Sum Sum ← Product (('+' / '-') Product)* Product ← Value (('*' / '/') ●)*

假设我有一个定义了一堆嵌套规则的

Expr    ← Sum
Sum     ← Product (('+' / '-') Product)*
Product ← Value (('*' / '/') Value)*
Value   ← [0-9]+ / '(' Expr ')'
说我是对的● 这里是过程中的第二个

Expr    ← Sum
Sum     ← Product (('+' / '-') Product)*
Product ← Value (('*' / '/') ●)*
Value   ← [0-9]+ / '(' Expr ')'
这意味着我在这里的某个地方处于嵌套级别,比如说:

Expr
  Sum
    |Product
     +
     Product
    |Product
     -
     Product
       |Value
        *
        Value
       |Value
        *
        ●
当使用递归下降进行解析时,它是递归的,因此当
返回时,我们返回到“序列”
*
解析节点,然后返回到
产品
节点,该节点返回到产品序列节点,等等。因此很容易建立解析树

但是假设你想用一个。问题是,如何跟踪嵌套信息,以便在代码中(最终)说:

棘手的是,这可以任意嵌套,因此您可能有:

Product
  Value
    Product
      Value
        Product
          ...
因此,如果像
handleProductSequence
这样的函数除了函数的参数之外没有任何上下文,我无法告诉它应该如何“包装”并最终创建
ProductSequence
对象。在我添加的
state
对象中,我正在尝试添加
state.stack
属性或其他内容的方法,但我不确定其中会包含什么。任何帮助都将不胜感激。

您的堆栈必须在控制流中包含“您所在的位置”。在递归下降解析器中,这实际上与您在解析中的位置相同,因此您可以以这种方式编写通用LL解析器。就我个人而言,我可能会将一个产品表示为一个带有标记列表和处理函数的对象。(再加上一些EBNF操作符的扩展,如
*
)一个状态将是一个生产、生产中的一个位置和一个已匹配值的列表

但是,当LR解析器生成器已经存在,基本上使用这种表示,并且它们可以处理更多的语法时,很难找到这样做的好理由

Product
  Value
    Product
      Value
        Product
          ...