在scala中为基本解析器创建语法

时间:2016-12-29 15:12:58

标签: scala parsing

我希望在 Scala 中编写一个基本的解析器。几年前,我参与了一个java项目,在该项目中,我们为税收计算创建了一个财务解析器。

以下是我要解析的文本:

1)使用相等,逻辑运算符的基本表达式 2)条件仅限于IF,AND,OR 3)在控制台上打印的字符串类型的结果。

例如“IF X =='text'和Y == 2 Result SUCCESS”

我从“Scala编程”中读过Scala Combinator解析器,得到了一些想法。想要了解基于我的要求创建语法的过程。

根据我的阅读,我认为我需要很少的摘要来制作一种语言 1)表达式语法
2)运算符语法
3)文字/标记语法

从我认为它应该具有的初始代码中添加:

class BasicParser extends JavaTokenParsers{

def literals : Parser[Any] = stringLiteral| floatingPointNumber | "null" |   decimalNumber

def conditions: Parser[Any] = "["~repsep(literals, "AND") | repsep(literals, "OR")~"]"

//added later
def expression: Parser[Any] = "["~repsep(literals, conditions) ~"]"

}

我还需要为此解析器创建语法吗?

更新:好的,我回到了绘图板并考虑了解决这个问题的正确方法。

对于要定义的任何解析器,我们需要定义它将具有的标记。 那么我们应该定义运算符是否有,如果有的话。 然后我们应该定义表达式来表示令牌和运算符将以何种形式存在。

以下是基于这些要点更新的代码,我仍然认为这里存在一些差距。

class BasicParser extends JavaTokenParsers{

def literals : Parser[Any] = stringLiteral | floatingPointNumber | decimalNumber

def conditions: Parser[(String, String)=> Boolean]  = ("AND" | "OR" | "IF") ^^ {
case "AND" => AND

case "OR" => OR

case "IF" => IFExpr

}

 def AND(s1: String, s2:String): Boolean = {
// convert text and use AND ( && )

false
}

def OR(s1: String, s2:String):Boolean= {
// convert text and use OR( || )
false
}

def IFExpr(s: String, x: String): Boolean={
// convert s into condition
if(s)
  true
else
  false
}

def expression: Parser[Any] = literals | conditions

}

0 个答案:

没有答案