percyliang / sempre

Semantic Parser with Execution
Other
828 stars 301 forks source link

Choice of language for writing rules #198

Open krishnamittal96 opened 4 years ago

krishnamittal96 commented 4 years ago

Why wasn't a programming language like python/ java used to specify rules?

Instead of (rule $Expr ($PHRASE) (NumberFn))

# function annotations in python can be used to derive mapping from input type to rule
def numberRule(input: Phrase) -> ExpressionDerivation:
   return NumberFn(input)

Instead of (rule $Operator (plus) (ConstantFn (lambda y (lambda x (call + (var x) (var y))))))

# function annotations in python can also be used to derive mapping from input string to rule
def plusRule(input: 'plus') -> OperatorDerivation:
  span = input.getSpan()
  logicalForm = (lambda y (lambda x (call + (var x) (var y)))
  return Derivation(span, logicalForm) 

Instead of (rule $Partial ($Operator $Expr) (JoinFn forward))

def combine(input1: OperatorDerivation, input2: ExpressionDerivation) -> PartialDerivation:
  return JoinFn(forward, input1, input2)
ppasupat commented 4 years ago

I don't know the details, but some justifications could be: