Added parsing for monzos and support for escaped pitch_classes
Syntax for monzos supported in scala scales: [-1 1> etc.
Support for escaped pitches: {q12 e23 26}
This commit is contained in:
@ -1,20 +1,24 @@
|
||||
?root: lines
|
||||
|
||||
lines: (number | operation | ratio | edo_ratio | edji_ratio)+
|
||||
lines: (number | ratio | monzo | 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)? ">"
|
||||
!operator: "+" | "-" | "*" | "%" | "&" | "|" | "<<" | ">>"
|
||||
sub_operations: "(" operation ")"
|
||||
|
||||
// Signed number without EXP
|
||||
?number: float | int | random_int | random_float
|
||||
random_int: "(" int "," int ")"
|
||||
random_float: "(" float "," float ")"
|
||||
float: /(-?[0-9]+\.[0-9]*)|(\.[0-9]+)/
|
||||
int: /[0-9]+/
|
||||
int: /-?[0-9]+/
|
||||
|
||||
?ratio: frac_ratio | edo_ratio | edji_ratio | decimal_ratio
|
||||
frac_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)? ">"
|
||||
decimal_ratio: int "," int
|
||||
|
||||
monzo: "[" int+ ">"
|
||||
|
||||
operation: (number | ratio | monzo) (operator ((number | ratio | monzo) | sub_operations | operation))+
|
||||
!operator: "+" | "-" | "*" | "%" | "&" | "|" | "<<" | ">>"
|
||||
sub_operations: "(" operation ")"
|
||||
|
||||
%import common.WS
|
||||
%ignore WS
|
||||
@ -3,7 +3,7 @@
|
||||
sequence: (pitch_class | repeat_item | assignment | variable | variablelist | rest | dur_change | oct_mod | oct_change | WS | measure | chord | named_roman | cycle | random_integer | random_pitch | random_percent | range | list | repeated_list | lisp_operation | list_op | subdivision | eval | euclid | repeat)*
|
||||
|
||||
// Pitch classes
|
||||
pitch_class: prefix* pitch
|
||||
pitch_class: prefix* (pitch | escaped_pitch)
|
||||
prefix: (octave | duration_chars | escaped_decimal | escaped_octave | modifier)
|
||||
pitch: /-?[0-9TE]/
|
||||
escaped_decimal: "<" decimal ">"
|
||||
@ -39,10 +39,9 @@
|
||||
invert: /%-?[0-9][0-9]*/
|
||||
|
||||
// Valid as integer
|
||||
number: NUMBER | random_integer | cycle
|
||||
|
||||
// CYCLIC NUMBERS NOT IN USE. NUMBERS MUST BE VALIDATED FROM FULL CYCLES!
|
||||
// cyclic_number: "<" number (WS number)* ">"
|
||||
number: integer | random_integer | cycle
|
||||
integer: pitch+
|
||||
escaped_pitch: /{-?[0-9]+}/
|
||||
|
||||
// Repeats
|
||||
repeat: "[:" sequence ":" [number] "]"
|
||||
@ -53,10 +52,12 @@
|
||||
repeated_list: prefix* "(:" sequence ":" [number] ")"
|
||||
|
||||
// Right recursive list operation
|
||||
list_op: list (operator right_op)+
|
||||
list_op: list ((operator | list_operator) right_op)+
|
||||
right_op: list | number
|
||||
//operator: "+" | "-" | "*" | "%" | "&" | "|" | "<<" | ">>" | "@" | "#"
|
||||
operator: /([\+\-\*\/%\|\&]|<<|>>|@|#|<>)/
|
||||
// Operators that work only on lists: | << >>
|
||||
list_operator: /(\||<<|>>|<>|#|@)(?=[(\d])/
|
||||
// Common operators that works with numbers 3+5 3-5 etc.
|
||||
operator: /([\+\-\*\/%\&])/
|
||||
|
||||
// Euclidean cycles
|
||||
// TODO: Support randomization etc.
|
||||
@ -88,13 +89,9 @@
|
||||
random_percent: /(%)(?!\d)/
|
||||
|
||||
// Rules for evaluating clauses inside {}
|
||||
// TODO: Support for parenthesis?
|
||||
eval: "{" operation+ "}"
|
||||
operation: atom (operator (sub_operations | operation))*
|
||||
eval: "{" ((operation | rest) WS?)+ "}"
|
||||
operation: prefix? atom (operator (sub_operations | operation))*
|
||||
sub_operations: "(" operation ")"
|
||||
atom: (NUMBER | DECIMAL)
|
||||
atom: number
|
||||
|
||||
%import common.NUMBER
|
||||
//%import common.SIGNED_NUMBER
|
||||
%import common.DECIMAL
|
||||
%import common.WS
|
||||
Reference in New Issue
Block a user