1700474366
}
1700474367
1700474368
public Object interpreter(Context ctx){
1700474369
1700474370
//进行文法处理
1700474371
1700474372
return null;
1700474373
1700474374
}
1700474375
1700474376
}
1700474377
1700474378
每个非终结符表达式都代表了一个文法规则,并且每个文法规则都只关心自己周边的文法规则的结果(注意是结果),因此这就产生了每个非终结符表达式调用自己周边的非终结符表达式,然后最终、最小的文法规则就是终结符表达式,终结符表达式的概念就是如此,不能够再参与比自己更小的文法运算了。
1700474379
1700474380
客户类如代码清单27-11所示。
1700474381
1700474382
代码清单27-11 客户类
1700474383
1700474384
public class Client{
1700474385
1700474386
public static void main(String[]args){
1700474387
1700474388
Context ctx=new Context();
1700474389
1700474390
//通常定一个语法容器,容纳一个具体的表达式,通常为ListArray,LinkedList,Stack等类型
1700474391
1700474392
Stack<Expression>stack=null;
1700474393
1700474394
for(;){
1700474395
1700474396
//进行语法判断,并产生递归调用
1700474397
1700474398
}
1700474399
1700474400
//产生一个完整的语法树,由各个具体的语法分析进行解析
1700474401
1700474402
Expression exp=stack.pop();
1700474403
1700474404
//具体元素进入场景
1700474405
1700474406
exp.interpreter(ctx);
1700474407
1700474408
}
1700474409
1700474410
}
1700474411
1700474412
通常Client是一个封装类,封装的结果就是传递进来一个规范语法文件,解析器分析后产生结果并返回,避免了调用者与语法解析器的耦合关系。
1700474413
1700474414
1700474415
[
上一页 ]
[ :1.700474366e+09 ]
[
下一页 ]