编译原理5-8节看不懂了

来源:5-8 (编程 parser03 java) TinyScript表达式解析

weixin_慕田峪0187414

2020-07-27

java版。如何通过产生式写递归函数,从而将式子构建成抽象语法树,希望老师能举一个简单的例子。比如说不考虑优先级的情况,像上一节的simpleparse,如何用左递归的产生式来实现。还有一个ExprHOF接口的hoc()方法,方法体一直没实现,不知返回的具体是啥

写回答

3回答

求老仙

2020-08-03

关于hoc那部分,java代码如果是最新版, 是有个一个interface在定义hoc的。 相当于把函数作为函数的参数。

1
2
weixin_慕田峪0187414
回复
求老仙
好的,谢谢老师
2020-08-03
共2条回复

求老仙

2020-08-03

产生式如果不是左递归的,那么是可以解析出语法树的。 


你看比如 A -> xA|y 这种形式的产生式,如果你的函数这么写

parseA(input){

  if(input === y) {

     return new Node(y) 

     return

  }

  const x = new Node(x)

  const right = parseA(input)

  return new Node(x, right)

}


input代表输入流,按照上面的递归,是可以完整解析的。 如果你把 x A 看做一个节点的两个子节点,你就可以利用上面的过程收集并形成二叉树。 

1
0

weixin_慕田峪0187414

提问者

2020-08-03

好的,谢谢老师

0
0

大学计算机必修课新讲--编译原理+操作系统+图形学

轻松超越大学课程,前阿里P8专家的实践精华总结

1752 学习 · 157 问题

查看课程