|
Re: Generate matlab script form arithmetic expression [message #1746391 is a reply to message #1746369] |
Fri, 28 October 2016 04:02   |
|
here is a little incomplete startig point
def dispatch CharSequence gen(AndOrExpression exp) {
'''«exp.left.gen» «exp.op.transform» «exp.right.gen»'''
}
def dispatch CharSequence transform(LogicOperator exp) {
if (exp.name == 'and') {
'&'
} else if (exp.name == 'or') {
'|'
}
}
def dispatch CharSequence transform(EquationOperator exp) {
//incomplete, and your grammar kind a sucks regarding whitespace in the sentenses => better to have extra types foreach branch
if (exp.name == '==') {
'=='
} else if (exp.name == 'is equal to') {
'=='
} else {
throw new IllegalArgumentException(exp.toString);
}
}
def dispatch CharSequence gen(Comparison exp) {
'''«exp.left.gen» «exp.op.transform» «exp.right.gen»'''
}
def dispatch CharSequence gen(Div exp) {
'''«exp.left.gen» / «exp.right.gen»'''
}
def dispatch CharSequence gen(Multi exp) {
'''«exp.left.gen» * «exp.right.gen»'''
}
def dispatch CharSequence gen(Plus exp) {
'''«exp.left.gen» + «exp.right.gen»'''
}
def dispatch CharSequence gen(Minus exp) {
'''«exp.left.gen» + «exp.right.gen»'''
}
def dispatch CharSequence gen(NumberLiteral exp) {
'''«exp.value»'''
}
def dispatch CharSequence gen(SignalIdentifier exp) {
'''«exp.sigID»'''
}
def dispatch CharSequence gen(ParameterIdentifier exp) {
'''«exp.paramID»'''
}
def dispatch CharSequence gen(BooleanLiteral exp) {
'''«exp.bool»'''
}
def dispatch CharSequence gen(Expression exp) {
if (exp.LBrace != null && exp.RBrace != null && exp.function == null) {
'''(«exp.expression.gen»)'''
} else if (exp.LBrace != null && exp.RBrace != null && exp.function != null) {
'''«exp.function»(«exp.expression.gen»)'''
} else {
throw new IllegalArgumentException(exp.toString);
}
}
Need professional support for Xtext, Xpand, EMF?
Go to: https://www.itemis.com/en/it-services/methods-and-tools/xtext
Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.02189 seconds