为两个方法插入scala代码



考虑LL1语法:::=||num::=+::=*

现在考虑scala case类的集合。下面给出了代码,我只需要在exp()和time()方法中添加代码

sealed abstract class Token
case object PlusToken extends Token
case object TimesToken extends Token
case class NumToken(value:Int) extends Token
def isExpr(tokens:List[Token]):Boolean = {    
var remaining = tokens
   object ParseError extends Exception
   def expr():Unit = // ** add code here
   def plus():Unit = {
     if (remaining.headOption != Some(PlusToken)) throw ParseError
     remaining = remaining.tail
     expr()
     expr()
   }
   def times():Unit = // ** add code here
 try {
 expr()
 if (remaining.isEmpty)
    true
 else
    false
} catch {
 case ParseError => false
 }
} 

我需要添加expr()和time()方法的代码,以便isExpr()返回传递给它的令牌列表是否可以根据语法派生。

输出应采用以下方式:

isExpr(List(PlusToken, NumToken(5), NumToken(3)))               => true
isExpr(List(PlusToken, PlusToken))                              => false
isExpr(List(PlusToken, NumToken(1)))                            => false
isExpr(List(PlusToken, NumToken(9), NumToken(8), NumToken(7)))  => false

以下是我为exp()和time()方法编写的代码:

sealed abstract class Token
case object PlusToken extends Token
case object TimesToken extends Token
case class NumToken(value:Int) extends Token
def isExpr(tokens:List[Token]):Boolean = 
{
 var remaining = tokens
 object ParseError extends Exception
 def expr():Unit = // ** add code here
 {
     if(remaining.HeadOption == Some(PlusToken))
       plus()
       else if(remaining.headOption == Some(TimesToken))
       times()
     else remaining = remaining.tail
 }
   def plus():Unit = 
   {
     if (remaining.headOption != Some(PlusToken)) throw ParseError
     remaining = remaining.tail
     expr()
     expr()
   } 
   def times():Unit = // ** add code here
   {
     if (remaining.headOption != Some(TimesToken)) throw ParseError
     remaining = remaining.tail
     expr()
     expr()
   }
   try 
   {
     expr()
     if (remaining.isEmpty)
       true
     else
    false
   } catch 
   {
     case ParseError => false
   }
def main(argv: Array[String]) {}
}

对于我的代码,我得到了编译时错误。错误为:除外的类或对象定义。此外,我不知道如何使用main类来打印预期的内容。请查看我的scala代码,因为我对它完全陌生,并提供您的输入。

您在对象(classtraitobject)之外编写代码,正如错误所述。因此,您需要将代码封装在其中一个结构中。

对象示例

object Main {
  def someMethod....
  def main(argv: Array[String]) {
    ...main entry point of your system...
  }
}

最新更新