利用Java实现组合式解析器 - 编程入门网
{
this.recognized = recognized;
this.remaining = remaining;
this.succeeded = succeeded;
}
public boolean is_succeeded() {
return succeeded;
}
public String get_recognized() {
return recognized;
}
public String get_remaining() {
return remaining;
}
public static Result succeed(String recognized,
String remaining) {
return new Result(recognized, remaining, true);
}
public static Result fail() {
return new Result("", "", false);
}
}
利用Java实现组合式解析器(3)时间:2011-09-09 ibm 孙鸣 邓辉其中, recognized 字段表示这个解析器所认识的部分,remaining 表示经过这个解析 器解析后所剩余的部分,succeeded 表示解析是否成功,Result 是一个值对象 。有了解析器的精确定义,接下来我们就可以定义出最简单的解析器。显然,最 简单的解析器就是什么也不解析的解析器,把目标字符串原样返回,我们称其为 Zero,定义如下:
Zero 解析器一定会解析成功,不做任何语法单位识别并直接返 回目标字符串。下面我们来定义另外一个很简单的解析器 Item,只要目标字符 串不为空,Item 就会把目标字符串的第一个字符作为其识别结果,并返回成功 ,如果目标字符串为空,就返回失败,Item 的定义如下:
Zero 和 Item 是我们解析 器 DSL 中仅有的两个原子,在下一小节中,我们来定义解析器的组合方法。 解析器组合子 我们在上一小节中定义了 Item 解析器,它无条件 的解析出目标字符串中的第一个字符,如果我们希望能够变成有条件的解析,就 可以定义出一个 SAT 组合子,其接收一个条件谓词(predicate)和一个解析器 ,并生成一个复合解析器,该复合解析器能否解析成功取决于原始解析器的解析 结果是否满足给定的条件谓词,条件谓词和 SAT 的定义如下:
利用Java实现组合式解析器(4)时间:2011-09-09 ibm 孙鸣 邓辉如果, 我们想定义一个解析单个数字的解析器,那么就可以定义一个 IsDigit 条件谓 词,并通过 SAT 把该 IsDigit 和 Item 组合起来,代码如下:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |