Adding support for ratio operations

This commit is contained in:
2023-03-15 23:42:34 +02:00
parent 48426fdb0e
commit 882a9a7b4b
2 changed files with 3 additions and 2 deletions

View File

@ -481,13 +481,14 @@ class ZiffersTransformer(Transformer):
)
# pylint: disable=locally-disabled, unused-argument, too-many-public-methods, invalid-name
# pylint: disable=locally-disabled, unused-argument, too-many-public-methods, invalid-name, eval-used
class ScalaTransformer(Transformer):
def lines(self, items):
cents = [ratio_to_cents(item) if isinstance(item,int) else item for item in items]
return cents_to_semitones(cents)
def operation(self, items):
# Safe eval. Items are pre-parsed.
val = eval("".join(str(item) for item in items))
return val

View File

@ -2,7 +2,7 @@
lines: (number | operation | ratio | edo_ratio | edji_ratio)+
operation: number (operator (number | sub_operations | operation))+
operation: (number | ratio) (operator ((number | ratio) | sub_operations | operation))+
ratio: (int | random_int) "/" (int | random_int)
edo_ratio: (int | random_int) "\\" (int | random_int)
edji_ratio: (int | random_int) "\\" (int | random_int) "<" (int | random_int) "/"? (int | random_int)? ">"