利用Java实现组合式解析器 - 编程入门网
t;=''9'';
}
}
解析单位数字的解析器 digit 定义如下:
我们可以采用同样的方法组合出单个字母、单个大写 字母、单个小写字母等解析器来。 接下来,我们定义一个 OR 组合子, 其接收两个解析器,并分别用这两个解析器去解析一个目标串,只要有一个解析 成功,就认为解析成功,如果两个都失败,则认为失败,代码定义如下:
我们可以定义出一个新的解析器 digit_or_alpha,如 果目标字符是数字或者字母那么该解析器就解析成功,否则就失败。代码如下: 判断是否是字母的条件谓词:
利用Java实现组合式解析器(5)时间:2011-09-09 ibm 孙鸣 邓辉用于解析单个字母的解析器 :
digit_or_alpha 解析器定义:
下面我们来定义 一个 顺序组合子 SEQ,该组合子接收两个解析器,先把第一个解析器应用到目 标字符串,如果成功,就把第二个解析器应用到第一个解析器识别后剩余的字符 串上,如果这两个解析器都解析成功,那么由 SEQ 组合起来的这个复合解析器 就解析成功,只要有一个失败,复合解析器就解析失败。当解析成功时,其识别 结果由这两个解析器的识别结果连接而成。 为了能够连接两个 Result 中已经识别出来的解析结果,我们在 Result 类中新增一个静态方法:concat, 其定义如下:
顺序组合子 SEQ 的定义 如下:
利用Java实现组合式解析器(6)时间:2011-09-09 ibm 孙鸣 邓辉现在,如果我们想定义一个解析器用以 识别第一个是字母,接下来是一个数字的情况,就可以这样定义:
接下来我们定义本文中的最后一个组合子:OneOrMany。 该组合子接收一个解析器和一个正整数值,其生成的复合解析器会用原始解析器 连续地对目标串进行解析,每一次解析时的输入为上一次解析后剩余的字符串, 解析的最大次数由输入的正整数值决定。如果第一次解析就失败,那么该复合解 析器就解析失败,否则的话,会一 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |