scala parse使用记录
来源:互联网 发布:七天网络网页版 编辑:程序博客网 时间:2024/06/05 13:39
1、
import scala.util.parsing.combinator._class ExprParser extends RegexParsers{val number="[0-9]+".rdef expr:Parser[Any]=term ~ opt(("+" | "-") ~ expr)def term:Parser[Any]=factor ~ rep("*" ~ factor)def factor:Parser[Any]=number | "(" ~ expr ~ ")"}object Parser_ex extends App{val parser=new ExprParserval result=parser.parseAll(parser.expr,"3-4*5") //"3-4-5"会出错,后面例子有解决办法if(result.successful) println(result.get)val result2=parser.parse(parser.expr,"3-4/5") //从左解析,直到找不到可以解析的。解析不了"/",会停下来。if(result2.successful) println(result2.get)}2、
import scala.util.parsing.combinator._class ExprParser extends RegexParsers{val number="[0-9]+".rdef expr:Parser[Int]=term ~ opt(("+" | "-") ~ expr) ^^ {case t ~ None => tcase t ~ Some("+" ~ e) => t+ecase t ~ Some("-" ~ e) => t-e}def term:Parser[Int]=factor ~ rep("*" ~ factor) ^^ {case f ~ r => f*r.map(_._2).product}def factor:Parser[Int]=number ^^ {_.toInt} | "(" ~ expr ~ ")" ^^ {case _ ~ e ~ _ => e}}object Parser_ex2 extends App{val parser=new ExprParserval result=parser.parseAll(parser.expr,"3-4*5") //"3-4-5"会出错,后面例子有解决办法if(result.successful) println(result.get)val result2=parser.parse(parser.expr,"3-4/5") //从左解析,直到找不到可以解析的。解析不了"/",会停下来。if(result2.successful) println(result2.get)}3、
import scala.util.parsing.combinator._class ExprParser extends RegexParsers{val number="[0-9]+".rdef expr:Parser[Int]=term ~ opt(("+" | "-") ~ expr) ^^ {case t ~ None => tcase t ~ Some("+" ~ e) => t+ecase t ~ Some("-" ~ e) => t-e}def term:Parser[Int]=factor ~ rep("*" ~> factor) ^^ {case f ~ r => f*r.product}def factor:Parser[Int]=number ^^ {_.toInt} | "(" ~> expr <~ ")"}object Parser_ex3 extends App{val parser=new ExprParserval result=parser.parseAll(parser.expr,"3-4*5") //"3-4-5"会出错,后面例子有解决办法if(result.successful) println(result.get)val result2=parser.parse(parser.expr,"3-4/5") //从左解析,直到找不到可以解析的。解析不了"/",会停下来。if(result2.successful) println(result2.get)}4、
import scala.util.parsing.combinator._class Exprcase class Number(value:Int) extends Exprcase class Operator(op:String,left:Expr,right:Expr) extends Exprclass ExprParser extends RegexParsers{val wholeNumber="[0-9]+".rdef expr:Parser[Expr]=term ~ opt(("+" | "-") ~ expr) ^^ {case t ~ None => tcase t ~ Some("+" ~ e) => Operator("+",t,e)case t ~ Some("-" ~ e) => Operator("-",t,e)}def term:Parser[Expr]=(factor ~ opt("*" ~> term)) ^^ {case a ~ None => acase a ~ Some(b) => Operator("*",a,b)}def factor:Parser[Expr]=wholeNumber ^^ (n => Number(n.toInt)) | "(" ~> expr <~ ")"}object Parser_ex4 extends App{val parser=new ExprParserval result=parser.parseAll(parser.expr,"3-4*5") //"3-4-5"会出错,后面例子有解决办法if(result.successful) println(result.get)}5、
import scala.util.parsing.combinator._class ExprParser extends RegexParsers{val number="[0-9]+".rdef expr:Parser[Int]=term ~ rep(("+" | "-") ~ term ^^ {case "+" ~ t => tcase "-" ~ t => -t}) ^^ {case t ~ r => t+r.sum}def term:Parser[Int]=factor ~ rep("*" ~> factor) ^^ {case f ~ r => f*r.product}def factor:Parser[Int]=number ^^ {_.toInt} | "(" ~> expr <~ ")"}object Parser_ex5 extends App{val parser=new ExprParserval result=parser.parseAll(parser.expr,"3-4-5")if(result.successful) println(result.get)}6、
import scala.util.parsing.input._import scala.util.parsing.combinator._class ExprParser extends RegexParsers with PackratParsers {lazy val ones:PackratParser[Any]=ones ~ "1" ^^ {case a ~ b => a+b } | "1"def parseAll[T](p:Parser[T],input:String)=phrase(p)(new PackratReader(new CharSequenceReader(input)))val number="[0-9]+".r/*lazy val expr:PackratParser[Any]=opt(log(expr)("expr:") ~ ("+" | "-")) ~ termlazy val term:PackratParser[Any]=factor ~ rep("*" ~ factor)lazy val factor:PackratParser[Any]=number | "(" ~ expr ~ ")"*///(Some(((Some(((None~(3~List()))~-))~(4~List()))~-))~(5~List())) //在不知道如何做的时候,参考parser_ex.scala打印出解析结果//opt(log(expr)("expr:") ~ ("+" | "-")) ~ term/*trying expr: at scala.util.parsing.combinator.PackratParsers$PackratReader@16b83ccexpr: --> [1.1] failure: Base Failure3-4-5^trying expr: at scala.util.parsing.combinator.PackratParsers$PackratReader@16b83ccexpr: --> [1.2] parsed: (None~(3~List()))trying expr: at scala.util.parsing.combinator.PackratParsers$PackratReader@16b83ccexpr: --> [1.4] parsed: (Some(((None~(3~List()))~-))~(4~List()))trying expr: at scala.util.parsing.combinator.PackratParsers$PackratReader@16b83ccexpr: --> [1.6] parsed: (Some(((Some(((None~(3~List()))~-))~(4~List()))~-))~(5~List()))(Some(((Some(((None~(3~List()))~-))~(4~List()))~-))~(5~List()))*/lazy val expr:PackratParser[Int]=opt(expr ~ ("+" | "-")) ~ term ^^ {case (None ~ (r)) => r //记住这个吧:(3~List())是用(r)来匹配,并且r就表示3,试出来的。case (Some((e ~ "+")) ~ (r)) => e+rcase (Some((e ~ "-")) ~ (r)) => e-r}lazy val term:PackratParser[Int]=factor ~ rep("*" ~> factor) ^^ {case f ~ r => f*r.product}lazy val factor:PackratParser[Int]=number ^^ {_.toInt} | "(" ~> expr <~ ")"}object Parser_ex6 extends App{val parser=new ExprParserval result=parser.parseAll(parser.expr,"3-4-5")if(result.successful) println(result.get)val result2=parser.parseAll(parser.expr,"3-4*5")if(result2.successful) println(result2.get)val result3=parser.parseAll(parser.ones,"111111")if(result3.successful) println(result3.get)}
0 0
- scala parse使用记录
- scala记录
- Scala学习记录-Scala是什么
- android parse 使用笔记
- parse server使用
- Parse server使用
- Scala 作业记录 00
- Scala 作业记录 01
- Scala 作业记录 03
- scala使用
- scala 使用
- Scala学习记录-Scala入门资源
- Scala学习记录-Scala Windows环境搭建
- Parse 使用- iOS 后台数据
- JSON中使用JArray.Parse
- JS使用eval(JSON.parse)
- JSON.stringfy()/JSON.parse()使用
- [Scala--基础]---Scala枚举使用
- HDU 5744 Keep On Movin
- 论文中的长句子
- Tree Preorder, Inorder, and Postorder Iteratively Summarization
- 记PHPStudy-win10系统80端口被占用的经历
- hdu5724 博弈+SG函数+状压 多校1
- scala parse使用记录
- hdoj 1014 Divding(03背包问题)
- 计算几何:极角排序(poj 2007 Scrambled Polygon)与简单凸包(poj 1113 Wall)
- 开源
- linux device driver --- 驱动 poll 执行流程图
- 亿级Web系统搭建——单机到分布式集群
- hdu 5739 Fantasia (2016多校第二场1006)
- Java——反射
- 删除链表的中间节点和a/b处的节点