首页 > 其他分享 >compiler expression pattern match

compiler expression pattern match

时间:2023-06-06 20:13:32浏览次数:37  
标签:right pattern expression Null root match left

 

编译器中经常需要用到pattern match。

那么如何实现呢?

比较直观的方法是使用递归。

以pattern match: y= a * (b + c) 为例。

首先,将其解析成一个抽象语法树:* a + b c

其次,递归match:

match(y, pattern) => match(y, '* a + b c')

左边是待检测的string,右边的是pattern。

只要第一步符合,则进行下一步match:

match(y->root, '*')

match(y->left, 'a')

match(y->right, '+ b c')。

伪代码

def match(y, pattern):

  if(y->left == Null, y->right == Null) return y->root == pattern->root

  return match(y->left, pattern->left) && match(y->right, pattern->right)

 

[未完待续]

标签:right,pattern,expression,Null,root,match,left
From: https://www.cnblogs.com/simpleminds/p/17461589.html

相关文章

  • Python正则表达式学习(4)——re.match() 和 re.search()
    Python提供了基于正则表达式的两种不同的原始操作:re.match()仅在字符串的开头检查匹配,只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。re.search()检查字符串中任何位置的匹配例如:In[2]:re.match("c","absdbdfskdvc")In[3]:re.search("c","a......
  • 5) Prototype Pattern
    类别: CreationalPattern问题: 不想修改原对象状态,但需要依据当前数据进行计算方案:   示例: publicclassPrototypePattern{publicstaticvoidmain(String[]args){Moviemovie=newMovie();movie.setName("xxxxxx");Movie......
  • 4) Builder Pattern
    类别: Creationalpattern问题: 构造函数入参超长易变方案: 示例:publicclassBuilderPatternDemo{publicstaticvoidmain(String[]args){Car.Builderbuilder=newCar.Builder("Benz");Carcar=builder.build();System.out.pri......
  • 3) Singleton pattern
    类别:creationalPattern问题/动机:反复创建对象开销巨大耗时长消耗内存/重复使用方案:  示例: //1classDemo1{publicfinalstaticDemo1INSTANCE=newDemo1();privateDemo1(){if(INSTANCE!=null)thrownewRuntimeExcept......
  • 2) Abstract Factory Pattern
    类别: CreationalPattern问题/动机:如何创建一套父类的问题情形一:混淆,且不能察觉//下面这个方法本来是要建造一辆宝马汽车,但是因为零部件太多,粗心大意误用了奔驰的零件。publicCarcreateBMWCar(){Part1p1=newcom.bmw.Part1();[...]......
  • 1) Factory method pattern
    类别: CreationalPattern问题/动机如何创建一套子类的问题(父类引用指向子类实例)情形1:一个方法返回一个具体的子类极端情况:1万个子类需要一万个方法吗极端情况:如过再扩展一万个子类,还需要再增加一万个方法吗极端情况:虽然有一万个子类,但只需要用到其中一个,其他9999个干陪着......
  • 9) Composite Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.List;publicclassCompositePatternDemo{publicstaticvoidmain(String[]args){Bodysun=newBody("太阳","恒星",1392000000);......
  • 8) Filter/Criteria Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Set;publicclassCriteriaPatternDemo{publicstaticvoidmain(String[]args){List<Person>p......
  • 7) Bridge Pattern
    类别: StructuralPatterns问题:连连看的问题 不使用桥接,要写81个类,使用桥接,只需要18个类方案: 示例: publicclassBridgePatternDemo{publicstaticvoidmain(String[]args){Somebodysb=newXiaohong(newBanana());sb.eat();......
  • 6) Adapter Pattern
    类别: StructuralPattern问题:什么是接口?按照标准提供服务,其他想要使用该接口的要按照该标准接入服务什么是依赖?持有目标对象,拥有使用权(AuseB)数据线?数据线按USB标准接入充电宝,通过lightning提供充电服务手机?通过lightning标准接入数据线  客户端因种种限制只能接入......