Spaces:
Sleeping
Sleeping
| %{ | |
| const preferNumber = x => Number.isFinite(Number(x)) ? Number(x) : x; | |
| const location = (begin, end) => ({proto: "_PLAIN", lines: [begin.first_line, end.last_line], columns: [begin.first_column, end.last_column]}); | |
| const commandSubProtos = { | |
| markup: "MarkupCommand", | |
| repeat: "Repeat", | |
| relative: "Relative", | |
| parallelMusic: "ParallelMusic", | |
| time: "TimeSignature", | |
| partial: "Partial", | |
| times: "Times", | |
| tuplet: "Tuplet", | |
| clef: "Clef", | |
| key: "KeySignature", | |
| ottava: "OctaveShift", | |
| include: "Include", | |
| version: "Version", | |
| lyricmode: "LyricMode", | |
| chordmode: "ChordMode", | |
| grace: "Grace", | |
| acciaccatura: "Grace", | |
| appoggiatura: "Grace", | |
| slashedGrace: "Grace", | |
| afterGrace: "AfterGrace", | |
| language: "Language", | |
| transposition: "Transposition", | |
| stemUp: "StemDirection", | |
| stemDown: "StemDirection", | |
| stemNeutral: "StemDirection", | |
| change: "Change", | |
| }; | |
| const root = (sections = []) => ({proto: "Root", sections}); | |
| const appendSection = (list, item) => { | |
| list.sections.push(item); | |
| return list; | |
| }; | |
| const string = exp => ({proto: "LiteralString", exp}); | |
| const command = (cmd, ...args) => ({proto: commandSubProtos[cmd.substr(1)] || "Command", cmd: cmd.substr(1), args}); | |
| const variable = name => ({proto: "Variable", name: name.substr(1)}); | |
| const chord = (pitches, duration, {locations, post_events, ...options} = {}) => ({proto: "Chord", pitches, duration, post_events, _location: location(...locations), options: {...options, proto: "_PLAIN"}}); | |
| const rest = ({name, duration, post_events = null, locations}) => ({proto: "Rest", name, duration, post_events, _location: location(...locations)}); | |
| const chordElem = (pitch, {locations, ...options}) => ({proto: "ChordElement", pitch, _location: location(...locations), options: {...options, proto: "_PLAIN"}}); | |
| const briefChord = (body, {locations, post_events = null} = {}) => ({proto: "BriefChord", body: {...body, proto: "_PLAIN"}, post_events, _location: location(...locations)}); | |
| const block = (block, head, body = []) => ({proto: "Block", block, head, body}); | |
| const inlineBlock = body => ({proto: "InlineBlock", body}); | |
| const scheme = exp => ({proto: "Scheme", exp}); | |
| const schemeFunction = (func, args) => ({proto: "SchemeFunction", func, args}); | |
| const schemePair = (left, right) => ({proto: "SchemePair", left, right}); | |
| const schemePointer = value => ({proto: "SchemePointer", value}); | |
| const schemeEmbed = value => ({proto: "SchemeEmbed", value}); | |
| const assignment = (key, value) => ({proto: "Assignment", key, value}); | |
| const numberUnit = (number, unit) => ({proto: "NumberUnit", number: preferNumber(number), unit}); | |
| const musicBlock = body => ({proto: "MusicBlock", body}); | |
| const simultaneousList = list => ({proto: "SimultaneousList", list}); | |
| const contextedMusic = (head, body, lyrics) => ({proto: "ContextedMusic", head, body, lyrics}); | |
| const tempo = (beatsPerMinute, unit, text) => ({proto: "Tempo", beatsPerMinute: preferNumber(beatsPerMinute), unit: preferNumber(unit), text}); | |
| const postEvent = (direction, arg) => ({proto: "PostEvent", direction, arg}); | |
| const fingering = value => ({proto: "Fingering", value: preferNumber(value)}); | |
| const markup = (head, body) => ({proto: "Markup", head, body}); | |
| const lyric = (content, {locations, ...options}) => ({proto: "Lyric", content, _location: location(...locations), ...options}); | |
| const duration = ({number, dots, multipliers}) => ({proto: "Duration", number, dots, multipliers}); | |
| const comment = ({loc, ...data}) => ({proto: "Comment", _location: location(loc, loc), ...data}); | |
| let lineHeadTable = {}; | |
| let lineTailTable = {}; | |
| const lineHead = (loc, term) => { | |
| if (!term || typeof term !== "object") | |
| return; | |
| if (!lineHeadTable[loc.first_line] || lineHeadTable[loc.first_line].column > loc.first_column) | |
| lineHeadTable[loc.first_line] = {column: loc.first_column, term}; | |
| }; | |
| const lineTail = (loc, term) => { | |
| if (!term || typeof term !== "object") | |
| return; | |
| if (!lineTailTable[loc.last_line] || lineTailTable[loc.last_line].column < loc.last_column) | |
| lineTailTable[loc.last_line] = {column: loc.last_column, term}; | |
| }; | |
| const lineRegister = (loc, term) => { | |
| lineHead(loc, term); | |
| lineTail(loc, term); | |
| }; | |
| const attachComments = yy => { | |
| if (yy.$lotusComments && yy.$lotusComments.length > 0) { | |
| //console.log("attachComments:", yy.$lotusComments, lineTable); | |
| const headLineNumbers = Object.keys(lineHeadTable).map(Number); | |
| yy.$lotusComments.forEach(data => { | |
| const comm = comment(data); | |
| const tailLine = lineTailTable[data.loc.first_line]; | |
| if (tailLine) { | |
| tailLine.term._tailComment = comm; | |
| return; | |
| } | |
| const line = headLineNumbers.find(line => line >= data.loc.last_line); | |
| if (Number.isFinite(line) && lineHeadTable[line]) { | |
| lineHeadTable[line].term._headComment = comm; | |
| return; | |
| } | |
| // TODO: attach on root's tail | |
| }); | |
| } | |
| // reset parser states | |
| lineHeadTable = {}; | |
| lineTailTable = {}; | |
| }; | |
| %} | |
| %lex | |
| %option flex unicode | |
| A [a-zA-Z\200-\377] | |
| AA {A}|_ | |
| N [0-9] | |
| ANY_CHAR (.|\n) | |
| SYMBOL {A}([-_]{A}|{A})* | |
| COMMAND \\{SYMBOL} | |
| /* SPECIAL category is for every letter that needs to get passed to | |
| * the parser rather than being redefinable by the user */ | |
| SPECIAL [-+*/=<>{}!?_^'',.:] | |
| SHORTHAND (.|\\.) | |
| UNSIGNED {N}+ | |
| E_UNSIGNED \\{N}+ | |
| FRACTION {N}+\/{N}+ | |
| //INT [-]?{UNSIGNED} | |
| //REAL ({INT}\.{N}*)|([-]?\.{N}+) | |
| STRICTREAL {UNSIGNED}\.{UNSIGNED} | |
| WHITE [ \n\t\f\r] | |
| HORIZONTALWHITE [ \t] | |
| BLACK [^ \n\t\f\r] | |
| RESTNAME [rRs](?=[\W\d_]) | |
| ESCAPED [nt\\''""] | |
| //EXTENDER \_\_ | |
| //HYPHEN \-\- | |
| PRE_EXTENDER \_(?=\_) | |
| PRE_HYPHEN \-(?=\-) | |
| BOM_UTF8 \357\273\277 | |
| PHONET [abcdefgqh] | |
| PITCH {PHONET}(([i][s])*|([e][s])*|[s][e][s]|[s]*|[f]*)(?=[\W\d_]) | |
| //PLACEHOLDER_PITCH [s](?=[\W\d_^-]) | |
| //DURATION "1"|"2"|"4"|"8"|"16"|"32"|"64"|"128"|"256" | |
| //UNICODE_HAN [\p{Script=Han}] | |
| %% | |
| // extra lex | |
| // TODO: parse the dollar expression details | |
| [$][(][^()]*[)] return 'DOLLAR_SCHEME_EXPRESSION' | |
| \s+ {} // spaces | |
| \%\{(.|\n)*?\%\} yy.$lotusComments = yy.$lotusComments || []; yy.$lotusComments.push({text: yytext, loc: yylloc, scoped: true}); // scoped comments | |
| \%.* yy.$lotusComments = yy.$lotusComments || []; yy.$lotusComments.push({text: yytext, loc: yylloc}); // scoped comments | |
| \"(\\\"|[^"])*\" return 'STRING'; | |
| //{EXTENDER} return 'EXTENDER'; | |
| //{HYPHEN} return 'HYPHEN'; | |
| {PRE_EXTENDER} return 'PRE_EXTENDER'; | |
| {PRE_HYPHEN} return 'PRE_HYPHEN'; | |
| //"/+" return CHORD_BASS; | |
| //"^" return CHORD_CARET; | |
| //":" return CHORD_COLON; | |
| //"-" return CHORD_MINUS; | |
| //"/" return CHORD_SLASH; | |
| //"<" return 'ANGLE_OPEN'; | |
| //">" return 'ANGLE_CLOSE'; | |
| "<<" return 'DOUBLE_ANGLE_OPEN'; | |
| ">>" return 'DOUBLE_ANGLE_CLOSE'; | |
| "\\\\" return 'E_BACKSLASH'; | |
| {E_UNSIGNED} return 'E_UNSIGNED'; | |
| "\\new" return 'NEWCONTEXT'; | |
| "\\cm" return 'CENTIMETER'; | |
| "\\mm" return 'MILLIMETER'; | |
| "\\overrideProperty" return 'OVERRIDEPROPERTY'; | |
| // binary commands | |
| "\\relative" return 'CMD_RELATIVE'; | |
| "\\tweak" return 'CMD_TWEAK'; | |
| "\\key" return 'CMD_KEY'; | |
| //"\\times" return 'CMD_TIMES'; | |
| [\\][t][i][m][e][s] return 'CMD_TIMES'; | |
| "\\afterGrace" return 'CMD_AFTERGRACE'; | |
| "\\parallelMusic" return 'CMD_PARALLELMUSIC'; | |
| "\\shape" return 'CMD_SHAPE'; | |
| "\\tag" return 'CMD_TAG'; | |
| "\\scaleDurations" return 'CMD_SCALEDURATIONS'; | |
| // unitary commands | |
| "\\clef" return 'CMD_CLEF'; | |
| "\\time" return 'CMD_TIME'; | |
| "\\stemUp" return 'CMD_STEMUP'; | |
| "\\stemDown" return 'CMD_STEMDOWN'; | |
| "\\stemNeutral" return 'CMD_STEMNEUTRAL'; | |
| "\\bar" return 'CMD_BAR'; | |
| "\\omit" return 'CMD_OMIT'; | |
| "\\ottava" return 'CMD_OTTAVA'; | |
| "\\barNumberCheck" return 'CMD_BARNUMBERCHECK'; | |
| "\\partial" return 'CMD_PARTIAL'; | |
| "\\mark" return 'CMD_MARK'; | |
| "\\include" return 'CMD_INCLUDE'; | |
| "\\tupletSpan" return 'CMD_TUPLETSPAN'; | |
| "\\tuplet" return 'CMD_TUPLET'; | |
| "\\tupletNeutral" return 'CMD_TUPLETNEUTRAL'; | |
| "\\skip" return 'CMD_SKIP'; | |
| "\\skip"(?=\d) return 'CMD_SKIP'; | |
| "\\parenthesize" return 'CMD_PARENTHESIZE'; | |
| "\\unfoldRepeats" return 'CMD_UNFOLDREPEATS'; | |
| "\\grace" return 'CMD_GRACE'; | |
| "\\acciaccatura" return 'CMD_ACCIACCATURA'; | |
| "\\appoggiatura" return 'CMD_APPOGGIATURA'; | |
| "\\slashedGrace" return 'CMD_SLASHEDGRACE'; | |
| "\\language" return 'CMD_LANGUAGE'; | |
| "\\once" return 'CMD_ONCE'; | |
| "\\accidentalStyle" return 'CMD_ACCIDENTALSTYLE'; | |
| "\\numericTimeSignature" return 'CMD_NUMERICTIMESIGNATURE'; | |
| "\\defaultTimeSignature" return 'CMD_DEFAULTTIMESIGNATURE'; | |
| "\\bendAfter" return 'CMD_BENDAFTER'; | |
| "\\compoundMeter" return 'CMD_COMPOUNDMETER'; | |
| "\\transposition" return 'CMD_TRANSPOSITION'; | |
| "\\absolute" return 'CMD_ABSOLUTE'; | |
| "\\hide" return 'CMD_HIDE'; | |
| "\\crossStaff" return 'CMD_CROSSSTAFF'; | |
| "\\keepWithTag" return 'CMD_KEEPWITHTAG'; | |
| "\\articulate" return 'CMD_ARTICULATE'; | |
| // zero commands | |
| "\\tempoLegend" return 'CMD_TEMPOLEGEND'; | |
| "\\fermata" return 'CMD_FERMATA'; | |
| "\\mergeDifferentlyDottedOn" return 'CMD_MERGEDIFFERENTLYDOTTEDON'; | |
| "\\mergeDifferentlyHeadedOn" return 'CMD_MERGEDIFFERENTLYHEADEDON'; | |
| "\\voiceOne" return 'CMD_VOICE_NUMBER'; | |
| "\\voiceTwo" return 'CMD_VOICE_NUMBER'; | |
| "\\voiceThree" return 'CMD_VOICE_NUMBER'; | |
| "\\voiceFour" return 'CMD_VOICE_NUMBER'; | |
| //"\\voiceFive" return 'CMD_VOICE_NUMBER'; | |
| "\\Score" return 'CMD_SCORE'; | |
| "\\Voice" return 'CMD_VOICE'; | |
| "\\Staff" return 'CMD_STAFF'; | |
| "\\PianoStaff" return 'CMD_PIANOSTAFF'; | |
| "\\arpeggio" return 'CMD_ARPEGGIO'; | |
| "\\arpeggioArrowDown" return 'CMD_ARPEGGIOARROWDOWN'; | |
| "\\arpeggioArrowUp" return 'CMD_ARPEGGIOARROWUP'; | |
| "\\arpeggioNormal" return 'CMD_ARPEGGIONORMAL'; | |
| "\\arpeggioBracket" return 'CMD_ARPEGGIOBRACKET'; | |
| "\\arpeggioParenthesis" return 'CMD_ARPEGGIOPARENTHESIS'; | |
| "\\arpeggioParenthesisDashed" return 'CMD_ARPEGGIOPARENTHESISDASHED'; | |
| "\\glissando" return 'CMD_GLISSANDO'; | |
| "\\mordent" return 'CMD_MORDENT'; | |
| "\\musicglyph" return 'CMD_MUSICGLYPH'; | |
| "\\powerChords" return 'CMD_POWERCHORDS'; | |
| "\\prall" return 'CMD_PRALL'; | |
| "\\sustainOff" return 'CMD_SUSTAINOFF'; | |
| "\\sustainOn" return 'CMD_SUSTAINON'; | |
| "\\trill" return 'CMD_TRILL'; | |
| "\\turn" return 'CMD_TURN'; | |
| "\\pointAndClickOff" return 'CMD_POINTANDCLICKOFF'; | |
| "\\upbow" return 'CMD_UPBOW'; | |
| "\\downbow" return 'CMD_DOWNBOW'; | |
| "\\breathe" return 'CMD_BREATHE'; | |
| "\\startTextSpan" return 'CMD_STARTTEXTSPAN'; | |
| "\\stopTextSpan" return 'CMD_STOPTEXTSPAN'; | |
| "\\flageolet" return 'CMD_FLAGEOLET'; | |
| "\\slurDashed" return 'CMD_SLURDASHED'; | |
| "\\slurSolid" return 'CMD_SLURSOLID'; | |
| "\\break" return 'CMD_BREAK'; | |
| "\\pageBreak" return 'CMD_PAGEBREAK'; | |
| "\\startTrillSpan" return 'CMD_STARTTRILLSPAN'; | |
| "\\stopTrillSpan" return 'CMD_STOPTRILLSPAN'; | |
| "\\cadenzaOn" return 'CMD_CADENZAON'; | |
| "\\cadenzaOff" return 'CMD_CADENZAOFF'; | |
| "\\cresc" return 'CMD_CRESC'; | |
| "\\crescTextCresc" return 'CMD_CRESCTEXTCRESC'; | |
| "\\crescHairpin" return 'CMD_CRESCHAIRPIN'; | |
| "\\dim"(?=[\W]) return 'CMD_DIM'; | |
| "\\dimTextDim" return 'CMD_DIMTEXTDIM'; | |
| "\\dynamicUp" return 'CMD_DYNAMICUP'; | |
| "\\hideNotes" return 'CMD_HIDENOTES'; | |
| "\\unHideNotes" return 'CMD_UNHIDENOTES'; | |
| "\\newSpacingSection" return 'CMD_NEWSPACINGSECTION'; | |
| "\\noBeam" return 'CMD_NOBEAM'; | |
| "\\oneVoice" return 'CMD_ONEVOICE'; | |
| "\\phrasingSlurDown" return 'CMD_PHRASINGSLURDOWN'; | |
| "\\phrasingSlurNeutral" return 'CMD_PHRASINGSLURNEUTRAL'; | |
| "\\phrasingSlurUp" return 'CMD_PHRASINGSLURUP'; | |
| "\\slurDown" return 'CMD_SLURDOWN'; | |
| "\\slurNeutral" return 'CMD_SLURNEUTRAL'; | |
| "\\slurUp" return 'CMD_SLURUP'; | |
| "\\tieDown" return 'CMD_TIEDOWN'; | |
| "\\tieNeutral" return 'CMD_TIENEUTRAL'; | |
| "\\tieUp" return 'CMD_TIEUP'; | |
| "\\tupletUp" return 'CMD_TUPLETUP'; | |
| "\\tupletDown" return 'CMD_TUPLETDOWN'; | |
| "\\shiftOn" return 'CMD_SHIFTON'; | |
| "\\repeatTie" return 'CMD_REPEATTIE'; | |
| "\\marcato" return 'CMD_MARCATO'; | |
| "\\stopped" return 'CMD_STOPPED'; | |
| "\\tenuto" return 'CMD_TENUTO'; | |
| "\\staccatissimo" return 'CMD_STACCATISSIMO'; | |
| "\\accent" return 'CMD_ACCENT'; | |
| "\\staccato" return 'CMD_STACCATO'; | |
| "\\portato" return 'CMD_PORTATO'; | |
| "\\mp"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\mf"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\"[p]+(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\"[f]+(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\sf"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\sff"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\sfp"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\sfpp"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\fp"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\mfp"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\rf"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\rfz"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\sfz"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\sffz"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\fz"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\fzp"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\ffz"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\ppz"(?=[\W]) return 'CMD_DYNAMIC_MARKINGS'; | |
| "\\breve" return 'CMD_BREVE'; | |
| "\\longa" return 'CMD_LONGA'; | |
| // markup commands | |
| "\\version" return 'CMD_VERSION'; | |
| "\\column" return 'CMD_COLUMN'; | |
| "\\line" return 'CMD_LINE'; | |
| "\\bold" return 'CMD_BOLD'; | |
| "\\italic" return 'CMD_ITALIC'; | |
| "\\box" return 'CMD_BOX'; | |
| "\\whiteout" return 'CMD_WHITEOUT'; | |
| "\\dynamic" return 'CMD_DYNAMIC'; | |
| "\\abs-fontsize" return 'CMD_ABS_FONTSIZE'; | |
| "\\with-color" return 'CMD_WITH_COLOR'; | |
| "\\char" return 'CMD_CHAR'; | |
| "\\center-column" return 'CMD_CENTER_COLUMN'; | |
| "\\right-column" return 'CMD_RIGHT_COLUMN'; | |
| "\\with-url" return 'CMD_WITH_URL'; | |
| "\\sans" return 'CMD_SANS'; | |
| "\\concat" return 'CMD_CONCAT'; | |
| "\\maintainer" return 'CMD_MAINTAINER'; | |
| "\\footnote" return 'CMD_FOOTNOTE'; | |
| "\\natural" return 'CMD_NATURAL'; | |
| "\\flat" return 'CMD_FLAT'; | |
| "\\sharp" return 'CMD_SHARP'; | |
| "\\hspace" return 'CMD_HSPACE'; | |
| "\\footer" return 'CMD_FOOTER'; | |
| "\\center-align" return 'CMD_CENTER_ALIGN'; | |
| "\\right-align" return 'CMD_RIGHT_ALIGN'; | |
| "\\general-align" return 'CMD_GENERAL_ALIGN'; | |
| "\\lower" return 'CMD_LOWER'; | |
| "\\finger" return 'CMD_FINGER'; | |
| "\\fontsize" return 'CMD_FONTSIZE'; | |
| "\\raise" return 'CMD_RAISE'; | |
| "\\note" return 'CMD_NOTE'; | |
| "\\circle" return 'CMD_CIRCLE'; | |
| "\\pad-markup" return 'CMD_PAD_MARKUP'; | |
| "\\smaller" return 'CMD_SMALLER'; | |
| "\\normal-text" return 'CMD_NORMAL_TEXT'; | |
| "\\huge" return 'CMD_HUGE'; | |
| "\\large" return 'CMD_LARGE'; | |
| "\\normalsize" return 'CMD_NORMALSIZE'; | |
| "\\small" return 'CMD_SMALL'; | |
| "\\tiny" return 'CMD_TINY'; | |
| "\\teeny" return 'CMD_TEENY'; | |
| "\\medium" return 'CMD_MEDIUM'; | |
| // syntax commands | |
| "\\header" return 'HEADER'; | |
| "\\markup" return 'MARKUP'; | |
| "\\markuplist" return 'MARKUPLIST'; | |
| "\\repeat" return 'REPEAT'; | |
| "\\context" return 'CONTEXT'; | |
| "\\accepts" return 'ACCEPTS'; | |
| "\\addlyrics" return 'ADDLYRICS'; | |
| "\\alias" return 'ALIAS'; | |
| "\\alternative" return 'ALTERNATIVE'; | |
| "\\book" return 'BOOK'; | |
| "\\bookpart" return 'BOOKPART'; | |
| "\\change" return 'CHANGE'; | |
| "\\chordmode" return 'CHORDMODE'; | |
| "\\chords" return 'CHORDS'; | |
| "\\consists" return 'CONSISTS'; | |
| "\\default" return 'DEFAULT'; | |
| "\\defaultchild" return 'DEFAULTCHILD'; | |
| "\\denies" return 'DENIES'; | |
| "\\description" return 'DESCRIPTION'; | |
| "\\drummode" return 'DRUMMODE'; | |
| "\\drums" return 'DRUMS'; | |
| "\\etc" return 'ETC'; | |
| "\\figuremode" return 'FIGUREMODE'; | |
| "\\figures" return 'FIGURES'; | |
| "\\version-error" return 'INVALID'; | |
| "\\layout" return 'LAYOUT'; | |
| "\\lyricmode" return 'LYRICMODE'; | |
| "\\lyrics" return 'LYRICS'; | |
| "\\lyricsto" return 'LYRICSTO'; | |
| "\\midi" return 'MIDI'; | |
| "\\name" return 'NAME'; | |
| "\\notemode" return 'NOTEMODE'; | |
| "\\override" return 'OVERRIDE'; | |
| "\\paper" return 'PAPER'; | |
| "\\remove" return 'REMOVE'; | |
| "\\rest" return 'REST'; | |
| "\\revert" return 'REVERT'; | |
| "\\score" return 'SCORE'; | |
| "\\score-lines" return 'SCORELINES'; | |
| "\\sequential" return 'SEQUENTIAL'; | |
| "\\set" return 'SET'; | |
| "\\simultaneous" return 'SIMULTANEOUS'; | |
| "\\tempo" return 'TEMPO'; | |
| "\\type" return 'TYPE'; | |
| "\\unset" return 'UNSET'; | |
| "\\with" return 'WITH'; | |
| // simple commands | |
| "\\<" return 'CMD_CRESCENDO_BEGIN'; | |
| "\\>" return 'CMD_DECRESCENDO_BEGIN'; | |
| "\\!" return 'CMD_DYNAMICS_END'; | |
| {COMMAND} return 'COMMAND'; | |
| {PITCH} return 'PITCH'; | |
| //{PLACEHOLDER_PITCH} return 'PLACEHOLDER_PITCH'; | |
| //{UNSIGNED} return 'POST_UNSIGNED'; | |
| {RESTNAME} return 'RESTNAME'; | |
| {FRACTION} return 'FRACTION'; | |
| //{REAL} return 'REAL'; | |
| {UNSIGNED} return 'UNSIGNED'; | |
| //{INT} return 'INT'; | |
| // CHORD_MODIFIER | |
| [m][a][j](?=[\W\d]) return 'CHORD_MODIFIER_WORD'; | |
| m(?=[\W\d]) return 'CHORD_MODIFIER_WORD'; | |
| [a][u][g](?=[\W\d]) return 'CHORD_MODIFIER_WORD'; | |
| [d][i][m](?=[\W\d]) return 'CHORD_MODIFIER_WORD'; | |
| [s][u][s](?=[\W\d]) return 'CHORD_MODIFIER_WORD'; | |
| "inf.0" return yytext; | |
| {SYMBOL} return 'SYMBOL'; | |
| "#f" return 'SCM_FALSE'; | |
| "#t" return 'SCM_TRUE'; | |
| "#x"[\da-fA-F]+ return 'SCM_HEX'; | |
| "#:"{SYMBOL} return 'SCM_COLON'; | |
| "\\(" return yytext; | |
| "\\)" return yytext; | |
| \.(?=\d) return 'DOT_NUMBER_R'; | |
| //(?<=\d)\. return 'DOT_NUMBER_L'; | |
| {SPECIAL} return yytext; | |
| \| return 'DIVIDE'; | |
| [()] return yytext; | |
| "[" return yytext; | |
| "]" return yytext; | |
| "#" return yytext; | |
| "~" return yytext; | |
| "`" return yytext; | |
| . return 'UNKNOWN_CHAR'; | |
| <<EOF>> return 'EOF'; | |
| /lex | |
| %start start_symbol | |
| %% | |
| start_symbol | |
| : lilypond EOF | |
| { | |
| attachComments(yy); | |
| return $1; | |
| } | |
| //| embedded_lilypond | |
| ; | |
| lilypond | |
| : %empty | |
| {$$ = root();} | |
| | version | |
| {$$ = root([$1]); lineRegister(@1, $1);} | |
| | lilypond toplevel_expression | |
| {$$ = appendSection($1, $2); lineRegister(@2, $2);} | |
| | lilypond assignment | |
| {$$ = appendSection($1, $2); lineRegister(@2, $2);} | |
| ; | |
| version | |
| : CMD_VERSION literal_string | |
| {$$ = command($1, $2);} | |
| ; | |
| toplevel_expression | |
| : header_block | |
| {$$ = $1;} | |
| | composite_music | |
| {$$ = $1;} | |
| | full_markup | |
| {$$ = $1;} | |
| | output_def | |
| {$$ = $1;} | |
| | score_block | |
| {$$ = $1;} | |
| | book_block | |
| {$$ = $1;} | |
| | scm_identifier | |
| {$$ = $1;} | |
| //| full_markup_list | |
| // {$$ = $1;} | |
| //| bookpart_block | |
| //| BOOK_IDENTIFIER | |
| //| SCM_TOKEN | |
| //| embedded_scm_active | |
| ; | |
| score_block | |
| : SCORE '{' score_body '}' | |
| {$$ = block("score", $1, $3);} | |
| ; | |
| book_block | |
| : BOOK '{' book_body '}' | |
| {$$ = block("book", $1, $3);} | |
| ; | |
| book_body | |
| : %empty | |
| {$$ = [];} | |
| //| BOOK_IDENTIFIER | |
| | book_body paper_block | |
| {$$.push($2);} | |
| //| book_body bookpart_block | |
| // {$$.push($2);} | |
| | book_body score_block | |
| {$$.push($2);} | |
| | book_body composite_music | |
| {$$.push($2);} | |
| | book_body full_markup | |
| {$$.push($2);} | |
| | book_body full_markup_list | |
| {$$.push($2);} | |
| //| book_body SCM_TOKEN | |
| | book_body embedded_scm_active | |
| {$$.push($2);} | |
| | book_body lilypond_header | |
| {$$.push($2);} | |
| //| book_body error | |
| ; | |
| paper_block | |
| : output_def | |
| {$$ = $1;} | |
| ; | |
| header_block | |
| : lilypond_header | |
| {$$ = $1;} | |
| ; | |
| lilypond_header | |
| : HEADER '{' lilypond_header_body '}' | |
| {$$ = block("header", $1, $3);} | |
| ; | |
| lilypond_header_body | |
| : %empty | |
| {$$ = [];} | |
| | lilypond_header_body assignment | |
| {$$.push($2); lineRegister(@2, $2);} | |
| //| lilypond_header_body SCM_TOKEN | |
| //| lilypond_header_body embedded_scm_active | |
| ; | |
| assignment | |
| : assignment_id '=' identifier_init | |
| {$$ = assignment($1, $3);} | |
| | assignment_id '.' property_path '=' identifier_init | |
| {$$ = assignment($1 + "." + $3, $5);} | |
| //| markup_mode_word '=' identifier_init | |
| ; | |
| assignment_id | |
| : literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| // extra formula | |
| | PITCH | |
| {$$ = $1;} | |
| // extra formula | |
| | CHORD_MODIFIER_WORD | |
| {$$ = $1;} | |
| ; | |
| property_path | |
| : symbol_list_rev | |
| {$$ = $1;} | |
| ; | |
| symbol_list_rev | |
| : symbol_list_part | |
| {$$ = $1;} | |
| | symbol_list_rev '.' symbol_list_part | |
| {$$ = $1 + "." + $3;} | |
| | symbol_list_rev ',' symbol_list_part | |
| {$$ = $1 + "," + $3;} | |
| ; | |
| symbol_list_part | |
| : symbol_list_part_bare | |
| {$$ = $1;} | |
| | embedded_scm_bare | |
| {$$ = $1;} | |
| ; | |
| symbol_list_part_bare | |
| : SYMBOL | |
| {$$ = $1;} | |
| | symbol_list_element | |
| {$$ = $1;} | |
| ; | |
| symbol_list_element | |
| : literal_string | |
| {$$ = $1;} | |
| | UNSIGNED | |
| {$$ = $1;} | |
| ; | |
| identifier_init | |
| : identifier_init_nonumber | |
| {$$ = $1;} | |
| | number_expression | |
| {$$ = $1;} | |
| //| symbol_list_part_bare '.' property_path | |
| // {$$ = $1 + "." + $3;} | |
| //| symbol_list_part_bare ',' property_path | |
| // {$$ = $1 + "," + $3;} | |
| | post_event_nofinger post_events | |
| {$$ = [$1, $2];} | |
| ; | |
| number_expression | |
| : number_expression '+' number_term | |
| | number_expression '-' number_term | |
| | number_term | |
| ; | |
| number_term | |
| : number_factor | |
| | number_factor '*' number_factor | |
| | number_factor '/' number_factor | |
| ; | |
| number_factor | |
| : '-' number_factor | |
| | bare_number | |
| ; | |
| identifier_init_nonumber | |
| : header_block | |
| {$$ = $1;} | |
| | music_assign | |
| {$$ = $1;} | |
| //| full_markup_list | |
| // {$$ = $1;} | |
| | string | |
| {$$ = $1;} | |
| | pitch_or_music | |
| {$$ = $1;} | |
| | FRACTION | |
| {$$ = $1;} | |
| | embedded_scm | |
| {$$ = $1;} | |
| | score_block | |
| {$$ = $1;} | |
| | output_def | |
| {$$ = $1;} | |
| | context_modification | |
| {$$ = $1;} | |
| | book_block | |
| {$$ = $1;} | |
| //| bookpart_block | |
| //| context_def_spec_block | |
| //| partial_markup | |
| //| partial_function ETC | |
| ; | |
| string | |
| : literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| | full_markup | |
| {$$ = $1;} | |
| ; | |
| text | |
| : literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| | full_markup | |
| {$$ = $1;} | |
| | embedded_scm_bare | |
| {$$ = $1;} | |
| ; | |
| full_markup_list | |
| : MARKUPLIST | |
| {$$ = $1;} | |
| | markup_list | |
| {$$ = $1;} | |
| ; | |
| markup_list | |
| : markup_composed_list | |
| {$$ = $1;} | |
| | markup_uncomposed_list | |
| {$$ = [$1];} | |
| ; | |
| markup_composed_list | |
| : markup_head_1_list markup_uncomposed_list | |
| //{$$ = block("markup", $1, $2);} | |
| {$$ = [...$1, $2];} | |
| ; | |
| markup_head_1_list | |
| : markup_head_1_item | |
| {$$ = [$1];} | |
| | markup_head_1_list markup_head_1_item | |
| {$$ = $1.concat([$2]);} | |
| ; | |
| markup_head_1_item | |
| //: markup_function EXPECT_MARKUP markup_command_list_arguments | |
| //: markup_function markup_command_list_arguments | |
| // {$$ = {func: $1, args: $2};} | |
| : markup_function | |
| //{$$ = {func: $1};} | |
| {$$ = $1;} | |
| ; | |
| // equivalent for MARKUP_FUNCTION in lilypond's parser.yy | |
| markup_function | |
| //: CMD_COLUMN | |
| // {$$ = $1;} | |
| : CMD_LINE | |
| {$$ = $1;} | |
| //| CMD_BOLD | |
| // {$$ = $1;} | |
| //| CMD_ITALIC | |
| // {$$ = $1;} | |
| //| markup_font_size | |
| // {$$ = $1;} | |
| | CMD_BOX | |
| {$$ = $1;} | |
| | CMD_WHITEOUT | |
| {$$ = $1;} | |
| | CMD_DYNAMIC | |
| {$$ = $1;} | |
| //| CMD_CENTER_COLUMN | |
| // {$$ = $1;} | |
| //| CMD_WITH_URL | |
| // {$$ = $1;} | |
| //| CMD_SANS | |
| // {$$ = $1;} | |
| //| CMD_CONCAT | |
| // {$$ = $1;} | |
| | CMD_MAINTAINER | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| markup_font_size | |
| : CMD_HUGE | |
| {$$ = $1;} | |
| | CMD_LARGE | |
| {$$ = $1;} | |
| | CMD_NORMALSIZE | |
| {$$ = $1;} | |
| | CMD_SMALL | |
| {$$ = $1;} | |
| | CMD_TINY | |
| {$$ = $1;} | |
| | CMD_TEENY | |
| {$$ = $1;} | |
| | CMD_MEDIUM | |
| {$$ = $1;} | |
| ; | |
| markup_uncomposed_list | |
| : markup_braced_list | |
| {$$ = $1;} | |
| //| markup_command_list | |
| //| markup_scm MARKUPLIST_IDENTIFIER | |
| //| SCORELINES '{' score_body '}' | |
| ; | |
| markup_braced_list | |
| : '{' markup_braced_list_body '}' | |
| {$$ = inlineBlock($2);} | |
| ; | |
| markup_braced_list_body | |
| : %empty | |
| {$$ = [];} | |
| | markup_braced_list_body markup | |
| {$$ = $1.concat([$2]);} | |
| | markup_braced_list_body markup_list | |
| {$$ = $1.concat($2);} | |
| ; | |
| markup | |
| : markup_head_1_list simple_markup | |
| //{$$ = $1.concat([$2]);} | |
| {$$ = markup($1, $2);} | |
| | simple_markup | |
| {$$ = $1;} | |
| ; | |
| simple_markup | |
| : markup_word | |
| {$$ = $1;} | |
| | simple_markup_noword | |
| {$$ = $1;} | |
| ; | |
| markup_word | |
| : literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| | unsigned_number | |
| {$$ = $1;} | |
| | CMD_MUSICGLYPH | |
| {$$ = command($1);} | |
| | CMD_NATURAL | |
| {$$ = $1;} | |
| | CMD_FLAT | |
| {$$ = $1;} | |
| | CMD_SHARP | |
| {$$ = $1;} | |
| | CMD_FOOTER | |
| {$$ = $1;} | |
| | scm_identifier | |
| {$$ = $1;} | |
| // extra formula | |
| | music_property_def | |
| {$$ = $1;} | |
| | context_change | |
| {$$ = $1;} | |
| | pitch_mode_music | |
| {$$ = $1;} | |
| // extra formula | |
| | PITCH | |
| {$$ = $1;} | |
| // extra formula | |
| | REAL | |
| {$$ = $1;} | |
| // extra formula | |
| | INT | |
| {$$ = $1;} | |
| // extra formula | |
| | general_text | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| long_extender | |
| : PRE_EXTENDER "_" | |
| {$$ = $1 + $2} | |
| | PRE_EXTENDER long_extender | |
| {$$ = $1 + $2} | |
| ; | |
| // extra syntax | |
| general_text | |
| : CHORD_MODIFIER_WORD | |
| {$$ = $1;} | |
| | "." | |
| {$$ = $1;} | |
| | "-" | |
| {$$ = $1;} | |
| | "_" | |
| {$$ = $1;} | |
| | PRE_HYPHEN | |
| {$$ = $1;} | |
| | long_extender | |
| {$$ = $1;} | |
| | "=" | |
| {$$ = $1;} | |
| | "'" | |
| {$$ = $1;} | |
| | "," | |
| {$$ = $1;} | |
| | ":" | |
| {$$ = $1;} | |
| | "/" | |
| {$$ = $1;} | |
| | "(" | |
| {$$ = $1;} | |
| | ")" | |
| {$$ = $1;} | |
| | "*" | |
| {$$ = $1;} | |
| | "~" | |
| {$$ = $1;} | |
| | "!" | |
| {$$ = $1;} | |
| | "?" | |
| {$$ = $1;} | |
| | UNKNOWN_CHAR | |
| {$$ = $1;} | |
| //| PLACEHOLDER_PITCH | |
| // {$$ = $1;} | |
| | RESTNAME | |
| {$$ = $1;} | |
| ; | |
| simple_markup_noword | |
| : SCORE '{' score_body '}' | |
| //{$$ = {score: $3};} | |
| {$$ = block("score", $1, $3);} | |
| | markup_function markup_command_basic_arguments | |
| //{$$ = {func: $1, args: $2};} | |
| {$$ = command($1, ...$2);} | |
| //| markup_scm MARKUP_IDENTIFIER | |
| // extra formula | |
| | OVERRIDE scm_identifier | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_ABS_FONTSIZE scm_identifier markup | |
| {$$ = command($1, $2, $3);} | |
| // extra formula | |
| | CMD_ABS_FONTSIZE scm_identifier markup_list | |
| {$$ = command($1, $2, ...$3);} | |
| // extra formula | |
| | CMD_WITH_COLOR scm_identifier markup | |
| {$$ = command($1, $2, $3);} | |
| // extra formula | |
| | CMD_CHAR scm_identifier | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_HSPACE scm_identifier | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_SANS markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_SANS markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_CONCAT markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_COLUMN markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_CENTER_COLUMN markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_RIGHT_COLUMN markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_FOOTNOTE string string | |
| {$$ = command($1, $2, $3);} | |
| // extra formula | |
| | CMD_WITH_URL scalar string | |
| {$$ = command($1, $2, $3);} | |
| // extra formula | |
| | CMD_WITH_URL scalar markup_list | |
| {$$ = command($1, $2, ...$3);} | |
| // extra formula | |
| | CMD_BOLD markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_BOLD markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | markup_font_size markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | markup_font_size markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_ITALIC markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_ITALIC markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_CENTER_ALIGN markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_CENTER_ALIGN markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_RIGHT_ALIGN markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_RIGHT_ALIGN markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_GENERAL_ALIGN scm_identifier scm_identifier markup | |
| {$$ = command($1, $2, $3, $4);} | |
| // extra formula | |
| | CMD_LOWER scm_identifier | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_FINGER string | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_FONTSIZE scm_identifier markup | |
| {$$ = command($1, $2, $3);} | |
| // extra formula | |
| | CMD_FONTSIZE scm_identifier markup_list | |
| {$$ = command($1, $2, $3);} | |
| // extra formula | |
| | CMD_RAISE scm_identifier | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_NOTE scm_identifier scm_identifier markup | |
| {$$ = command($1, $2, $3, $4);} | |
| // extra formula | |
| | CMD_CIRCLE markup_list | |
| {$$ = command($1, ...$2);} | |
| // extra formula | |
| | CMD_CIRCLE markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_PAD_MARKUP scm_identifier | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_SMALLER markup | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | CMD_NORMAL_TEXT markup | |
| {$$ = command($1, $2);} | |
| ; | |
| markup_command_basic_arguments | |
| : %emtpy | |
| {$$ = [];} | |
| | /*EXPECT_MARKUP_LIST*/ markup_command_list_arguments markup_list | |
| {$$ = $1.concat($2);} | |
| | /*EXPECT_SCM*/ markup_command_list_arguments markup_command_embedded_lilypond | |
| {$$ = $1.concat($2);} | |
| //| EXPECT_SCM markup_command_list_arguments embedded_scm | |
| //| EXPECT_SCM markup_command_list_arguments mode_changed_music | |
| //| EXPECT_SCM markup_command_list_arguments MUSIC_IDENTIFIER | |
| //| EXPECT_SCM markup_command_list_arguments literal_string | |
| //| EXPECT_NO_MORE_ARGS | |
| ; | |
| markup_command_list_arguments | |
| : markup_command_basic_arguments | |
| {$$ = [$1];} | |
| | /*EXPECT_MARKUP*/ markup_command_list_arguments markup | |
| {$$ = $1.concat($2);} | |
| ; | |
| markup_command_embedded_lilypond | |
| : '{' embedded_lilypond '}' | |
| {$$ = $2;} | |
| ; | |
| embedded_lilypond | |
| : %empty | |
| {$$ = $1;} | |
| | identifier_init_nonumber | |
| {$$ = $1;} | |
| | embedded_lilypond_number | |
| {$$ = $1;} | |
| | post_event | |
| {$$ = $1;} | |
| //| duration post_events %prec ':' | |
| | music_embedded music_embedded music_list | |
| {$$ = [$1, $2, $3];} | |
| //| error | |
| //| INVALID embedded_lilypond | |
| ; | |
| embedded_lilypond_number | |
| : '-' embedded_lilypond_number | |
| {$$ = -$1;} | |
| | bare_number_common | |
| {$$ = $1;} | |
| //| UNSIGNED NUMBER_IDENTIFIER | |
| ; | |
| bare_number_common | |
| : REAL | |
| {$$ = Number($1);} | |
| //| NUMBER_IDENTIFIER | |
| //| REAL NUMBER_IDENTIFIER | |
| | number_identifier | |
| {$$ = $1;} | |
| | FRACTION | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| dot | |
| : "." | |
| {$$ = $1;} | |
| | DOT_NUMBER_R | |
| {$$ = $1;} | |
| ; | |
| INT | |
| : UNSIGNED | |
| {$$ = Number($1);} | |
| | "-" UNSIGNED | |
| {$$ = -Number($2);} | |
| ; | |
| // extra syntax | |
| positive_real | |
| : UNSIGNED DOT_NUMBER_R UNSIGNED | |
| {$$ = Number($1 + $2 + $3);} | |
| //| UNSIGNED DOT_NUMBER_L | |
| // {$$ = Number($1 + $2);} | |
| | DOT_NUMBER_R UNSIGNED | |
| {$$ = Number($1 + $2);} | |
| ; | |
| REAL | |
| : positive_real | |
| {$$ = $1;} | |
| | "-" positive_real | |
| {$$ = -$2;} | |
| ; | |
| // equivalent for NUMBER_IDENTIFIER in lilypond's parser.yy | |
| number_identifier | |
| : REAL number_unit | |
| {$$ = numberUnit($1, $2);} | |
| //| INT number_unit | |
| // {$$ = numberUnit($1, $2);} | |
| | UNSIGNED number_unit | |
| {$$ = numberUnit($1, $2);} | |
| ; | |
| // addon term to construct number_identifier | |
| number_unit | |
| : CENTIMETER | |
| {$$ = $1;} | |
| | MILLIMETER | |
| {$$ = $1;} | |
| ; | |
| score_body | |
| : score_items | |
| {$$ = $1;} | |
| //| score_body error | |
| ; | |
| score_items | |
| : %empty | |
| {$$ = [];} | |
| | score_items score_item | |
| {$$ = $1.concat([$2]); lineHead(@2, $2);} | |
| | score_items lilypond_header | |
| {$$ = $1.concat([$2]); lineHead(@2, $2);} | |
| ; | |
| score_item | |
| : music | |
| {$$ = $1;} | |
| | output_def | |
| {$$ = $1;} | |
| //: embedded_scm | |
| ; | |
| //markup_command_list | |
| // : MARKUP_LIST_FUNCTION markup_command_list_arguments | |
| // ; | |
| markup_scm | |
| : embedded_scm | |
| {$$ = $1;} | |
| ; | |
| embedded_scm | |
| : embedded_scm_bare | |
| {$$ = $1;} | |
| //| scm_function_call | |
| //| lookup | |
| ; | |
| scm_function_call | |
| : SCM_FUNCTION function_arglist | |
| ; | |
| function_arglist | |
| : function_arglist_nonbackup | |
| {$$ = $1;} | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_nonbackup DEFAULT | |
| ; | |
| function_arglist_nonbackup | |
| : function_arglist_common | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup post_event_nofinger | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' UNSIGNED | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' REAL | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' NUMBER_IDENTIFIER | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup embedded_scm_arg | |
| //| EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup bare_number_common | |
| | function_arglist_nonbackup_reparse REPARSE pitch_or_music | |
| | function_arglist_nonbackup_reparse REPARSE duration | |
| | function_arglist_nonbackup_reparse REPARSE reparsed_rhythm | |
| | function_arglist_nonbackup_reparse REPARSE bare_number_common | |
| | function_arglist_nonbackup_reparse REPARSE SCM_ARG | |
| | function_arglist_nonbackup_reparse REPARSE lyric_element_music | |
| | function_arglist_nonbackup_reparse REPARSE symbol_list_arg | |
| ; | |
| function_arglist_common | |
| //: EXPECT_NO_MORE_ARGS | |
| : %empty | |
| //| EXPECT_SCM function_arglist_optional embedded_scm_arg | |
| //| EXPECT_SCM function_arglist_optional bare_number_common | |
| //| EXPECT_SCM function_arglist_optional post_event_nofinger | |
| //| EXPECT_SCM function_arglist_optional '-' NUMBER_IDENTIFIER | |
| | function_arglist_common_reparse REPARSE SCM_ARG | |
| | function_arglist_common_reparse REPARSE lyric_element_music | |
| | function_arglist_common_reparse REPARSE pitch_or_music | |
| | function_arglist_common_reparse REPARSE bare_number_common | |
| | function_arglist_common_reparse REPARSE duration | |
| | function_arglist_common_reparse REPARSE reparsed_rhythm | |
| | function_arglist_common_reparse REPARSE symbol_list_arg | |
| ; | |
| lookup | |
| : LOOKUP_IDENTIFIER | |
| {$$ = $1;} | |
| | LOOKUP_IDENTIFIER '.' symbol_list_rev | |
| {$$ = $1 + "." + $2;} | |
| ; | |
| symbol_list_part | |
| : symbol_list_part_bare | |
| {$$ = $1;} | |
| | embedded_scm_bare | |
| {$$ = $1;} | |
| ; | |
| embedded_scm_bare | |
| //: SCM_TOKEN | |
| //| SCM_IDENTIFIER | |
| : scm_identifier | |
| {$$ = $1;} | |
| ; | |
| // equivalent for SCM_IDENTIFIER in lilypond parser.yy | |
| scm_identifier | |
| //: SCM_FALSE | |
| // {$$ = scheme(false);} | |
| //| SCM_TRUE | |
| // {$$ = scheme(true);} | |
| //| SCM_INT | |
| // {$$ = scheme($1.substr(1));} | |
| //| "#" "'" SYMBOL | |
| // {$$ = scheme("'" + $3);} | |
| : "#" scheme_expression | |
| {$$ = scheme($2);} | |
| | DOLLAR_SCHEME_EXPRESSION | |
| {$$ = $1;} | |
| ; | |
| composite_music | |
| : basic_music | |
| {$$ = $1;} | |
| | contexted_basic_music | |
| {$$ = $1;} | |
| //| basic_music new_lyrics | |
| ; | |
| contexted_basic_music | |
| : context_prefix contextable_music new_lyrics | |
| {$$ = contextedMusic($1, $2, $3);} | |
| | context_prefix contextable_music | |
| {$$ = contextedMusic($1, $2);} | |
| | context_prefix contexted_basic_music | |
| {$$ = contextedMusic($1, $2);} | |
| ; | |
| contextable_music | |
| : basic_music | |
| {$$ = $1;} | |
| | pitch_as_music | |
| {$$ = $1;} | |
| | event_chord | |
| {$$ = $1;} | |
| // extra formula | |
| | variable_command | |
| {$$ = $1;} | |
| ; | |
| new_lyrics | |
| : ADDLYRICS optional_context_mods lyric_mode_music | |
| {$$ = [{addLyrics: $3, mods: $2}];} | |
| | new_lyrics ADDLYRICS optional_context_mods lyric_mode_music | |
| {$$ = $1.concat([{addLyrics: $4, mods: $3}]);} | |
| ; | |
| lyric_mode_music | |
| : grouped_music_list | |
| {$$ = $1;} | |
| //| MUSIC_IDENTIFIER | |
| | music_identifier | |
| {$$ = $1;} | |
| ; | |
| context_prefix | |
| : CONTEXT symbol optional_id optional_context_mods | |
| //{$$ = {context: $2, assign: $3, mods: $4};} | |
| {$$ = command($1, $2, $3, ...$4);} | |
| | NEWCONTEXT symbol optional_id optional_context_mods | |
| //{$$ = {context: $2, new: true, assign: $3, mods: $4};} | |
| {$$ = command($1, $2, $3, ...$4);} | |
| ; | |
| optional_id | |
| : %empty | |
| {$$ = null;} | |
| | '=' simple_string | |
| {$$ = assignment(null, $2);} | |
| ; | |
| optional_context_mods | |
| : context_modification_mods_list | |
| {$$ = $1;} | |
| ; | |
| context_modification_mods_list | |
| : %empty | |
| {$$ = [];} | |
| | context_modification_mods_list context_modification | |
| {$$ = $1.concat($2);} | |
| ; | |
| basic_music | |
| : repeated_music | |
| {$$ = $1;} | |
| | music_bare | |
| {$$ = $1;} | |
| | LYRICSTO simple_string lyric_mode_music | |
| {$$ = command($1, $2, $3);} | |
| | LYRICSTO symbol '=' simple_string lyric_mode_music | |
| {$$ = command($1, assignment($2, $4), $5);} | |
| ; | |
| music_bare | |
| : grouped_music_list | |
| {$$ = $1;} | |
| | music_identifier | |
| {$$ = $1;} | |
| | mode_changed_music | |
| {$$ = $1;} | |
| ; | |
| mode_changed_music | |
| : mode_changing_head grouped_music_list | |
| {$$ = command($1, $2);} | |
| | mode_changing_head_with_context optional_context_mods grouped_music_list | |
| {$$ = command($1, ...$2, $3);} | |
| // extra formula | |
| | CHORDMODE chordmode_braced_music_list | |
| {$$ = command($1, $2);} | |
| // extra formula | |
| | LYRICMODE lyricmode_braced_music_list | |
| {$$ = command($1, $2);} | |
| ; | |
| // extra syntax | |
| lyricmode_braced_music_list | |
| : '{' lyricmode_music_list '}' | |
| {$$ = musicBlock($2);} | |
| ; | |
| // extra syntax | |
| lyricmode_music_list | |
| : %empty | |
| {$$ = [];} | |
| | lyricmode_music_list lyricmode_music | |
| {$$ = $1.concat([$2]);} | |
| ; | |
| // extra syntax | |
| lyricmode_music | |
| : lyric_element_music | |
| {$$ = $1;} | |
| //| music_assign | |
| // {$$ = $1;} | |
| | music_property_def | |
| {$$ = $1;} | |
| | lyricmode_music_identifier | |
| {$$ = $1;} | |
| | lyricmode_repeated_music | |
| {$$ = $1;} | |
| | lyricmode_braced_music_list | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| lyricmode_music_identifier | |
| : zero_command | |
| {$$ = $1;} | |
| | CMD_TIME FRACTION | |
| {$$ = command($1, $2);} | |
| | CMD_BAR string | |
| {$$ = command($1, $2);} | |
| | CMD_OMIT property_path | |
| {$$ = command($1, $2);} | |
| | CMD_OTTAVA property_path | |
| {$$ = command($1, $2);} | |
| | CMD_BARNUMBERCHECK scm_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_BARNUMBERCHECK unsigned_number | |
| {$$ = command($1, $2);} | |
| | CMD_MARK full_markup | |
| {$$ = command($1, $2);} | |
| | CMD_SKIP duration | |
| {$$ = command($1, $2);} | |
| | CMD_UNFOLDREPEATS lyricmode_music | |
| {$$ = command($1, $2);} | |
| | CMD_ONCE music_assign | |
| {$$ = command($1, $2);} | |
| | CMD_PARTIAL duration | |
| {$$ = command($1, $2);} | |
| | CMD_TUPLETSPAN duration | |
| {$$ = command($1, $2);} | |
| | CMD_TUPLETSPAN DEFAULT | |
| {$$ = command($1, $2);} | |
| | CMD_TUPLET FRACTION lyricmode_music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_TUPLET FRACTION duration lyricmode_music | |
| {$$ = command($1, $2, $3, $4);} | |
| | CMD_TWEAK property_path scalar | |
| {$$ = command($1, $2, $3);} | |
| | CMD_TIMES FRACTION lyricmode_music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_SHAPE scm_identifier symbol | |
| {$$ = command($1, $2, $3);} | |
| | CMD_ACCIDENTALSTYLE grob_prop_spec | |
| {$$ = command($1, $2);} | |
| | CMD_NUMERICTIMESIGNATURE lyricmode_music_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_DEFAULTTIMESIGNATURE | |
| {$$ = command($1);} | |
| | CMD_BENDAFTER scm_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_COMPOUNDMETER scm_identifier | |
| {$$ = command($1, $2);} | |
| ; | |
| // extra syntax | |
| lyricmode_repeated_music | |
| : REPEAT simple_string unsigned_number lyricmode_braced_music_list | |
| {$$ = command($1, $2, $3, $4);} | |
| | REPEAT simple_string unsigned_number lyricmode_braced_music_list ALTERNATIVE lyricmode_braced_music_list | |
| {$$ = command($1, $2, $3, $4, command($5, $6));} | |
| ; | |
| // extra syntax | |
| chordmode_braced_music_list | |
| : '{' chordmode_music_list '}' | |
| {$$ = musicBlock($2);} | |
| ; | |
| // extra syntax | |
| chordmode_music_list | |
| : %empty | |
| {$$ = [];} | |
| | chordmode_music_list chordmode_music | |
| {$$ = $1.concat([$2]);} | |
| ; | |
| // extra syntax | |
| chordmode_music | |
| : new_chord post_events | |
| {$$ = briefChord($1, {post_events: $2, locations: [@1, @2]});} | |
| | music_assign | |
| {$$ = $1;} | |
| | chordmode_repeated_music | |
| {$$ = $1;} | |
| | chordmode_braced_music_list | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| chordmode_repeated_music | |
| : REPEAT simple_string unsigned_number chordmode_braced_music_list | |
| {$$ = command($1, $2, $3, $4);} | |
| | REPEAT simple_string unsigned_number chordmode_braced_music_list ALTERNATIVE chordmode_braced_music_list | |
| {$$ = command($1, $2, $3, $4, command($5, $6));} | |
| ; | |
| mode_changing_head_with_context | |
| : DRUMS | |
| {$$ = $1;} | |
| | FIGURES | |
| {$$ = $1;} | |
| | CHORDS | |
| {$$ = $1;} | |
| | LYRICS | |
| {$$ = $1;} | |
| ; | |
| mode_changing_head | |
| : NOTEMODE | |
| {$$ = $1;} | |
| | DRUMMODE | |
| {$$ = $1;} | |
| | FIGUREMODE | |
| {$$ = $1;} | |
| //| CHORDMODE | |
| // {$$ = $1;} | |
| //| LYRICMODE | |
| // {$$ = $1;} | |
| ; | |
| grouped_music_list | |
| : sequential_music | |
| {$$ = $1;} | |
| | simultaneous_music | |
| {$$ = $1;} | |
| ; | |
| simultaneous_music | |
| : SIMULTANEOUS braced_music_list | |
| {$$ = command($1, $2);} | |
| //| DOUBLE_ANGLE_OPEN music_list DOUBLE_ANGLE_CLOSE | |
| // {$$ = simultaneousList($2);} | |
| | DOUBLE_ANGLE_OPEN multiple_voices_music_list DOUBLE_ANGLE_CLOSE | |
| {$$ = simultaneousList($2);} | |
| ; | |
| // extra syntax | |
| multiple_voices_music_list | |
| : music_list | |
| {$$ = $1;} | |
| | multiple_voices_music_list E_BACKSLASH music_list | |
| {$$ = [...$1, $2, ...$3];} | |
| ; | |
| sequential_music | |
| : SEQUENTIAL braced_music_list | |
| {$$ = command($2);} | |
| | braced_music_list | |
| {$$ = $1;} | |
| ; | |
| braced_music_list | |
| : '{' music_list '}' | |
| {$$ = musicBlock($2);} | |
| ; | |
| music_list | |
| : %empty | |
| {$$ = [];} | |
| | music_list music_embedded | |
| {$$ = $1.concat([$2]); lineRegister(@2, $2);} | |
| ; | |
| music_embedded | |
| : music | |
| {$$ = $1;} | |
| | post_event | |
| {$$ = $1;} | |
| | music_embedded_backup | |
| {$$ = $1;} | |
| //| music_embedded_backup BACKUP lyric_element_music | |
| //| duration post_events %prec ':' | |
| ; | |
| music_embedded_backup | |
| : embedded_scm | |
| {$$ = $1;} | |
| ; | |
| music | |
| : music_assign | |
| {$$ = $1;} | |
| | pitch_as_music | |
| {$$ = $1;} | |
| //| lyric_element_music | |
| ; | |
| // extra syntax | |
| variable_command | |
| : COMMAND | |
| {$$ = variable($1);} | |
| // some test case use \lower as a variable name!? | |
| | CMD_LOWER | |
| {$$ = variable($1);} | |
| ; | |
| lyric_element_music | |
| : lyric_element optional_notemode_duration post_events | |
| {$$ = lyric($1, {duration: $2, post_events: $3, locations: [@1, @3]});} | |
| // extra formula | |
| | variable_command optional_notemode_duration post_events | |
| {$$ = lyric($1, {duration: $2, post_events: $3, locations: [@1, @3]});} | |
| ; | |
| lyric_element | |
| : full_markup | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| | literal_string | |
| {$$ = $1;} | |
| //| LYRIC_ELEMENT | |
| // extra formula | |
| | general_text | |
| {$$ = $1;} | |
| // extra formula | |
| | "'" | |
| {$$ = $1;} | |
| // extra formula | |
| | UNSIGNED | |
| {$$ = $1;} | |
| // extra formula | |
| | PITCH | |
| {$$ = $1;} | |
| | UNKNOWN_CHAR | |
| {$$ = $1;} | |
| ; | |
| pitch_as_music | |
| : pitch_or_music | |
| {$$ = $1;} | |
| ; | |
| music_assign | |
| : simple_music | |
| {$$ = $1;} | |
| | composite_music | |
| {$$ = $1;} | |
| ; | |
| simple_music | |
| : event_chord | |
| {$$ = $1;} | |
| | music_property_def | |
| {$$ = $1;} | |
| | context_change | |
| {$$ = $1;} | |
| // extra formula | |
| | variable_command | |
| {$$ = $1;} | |
| // extra formula | |
| | COMMAND full_markup | |
| {$$ = command($1, $2);} | |
| ; | |
| context_change | |
| : CHANGE symbol '=' simple_string | |
| {$$ = command($1, assignment($2, $4));} | |
| ; | |
| music_property_def | |
| : OVERRIDE grob_prop_path '=' scalar | |
| {$$ = command($1, assignment($2, $4));} | |
| // extra formula | |
| | OVERRIDEPROPERTY grob_prop_spec scm_identifier | |
| {$$ = command($1, $2, $3);} | |
| //| REVERT simple_revert_context revert_arg | |
| // {$$ = command($1, $2, $3);} | |
| | REVERT revert_arg | |
| {$$ = command($1, $2);} | |
| | SET context_prop_spec '=' scalar | |
| {$$ = command($1, assignment($2, $4));} | |
| | UNSET context_prop_spec | |
| {$$ = command($1, $2);} | |
| ; | |
| revert_arg | |
| //: revert_arg_backup BACKUP symbol_list_arg | |
| : revert_arg_backup | |
| {$$ = $1;} | |
| // extra formula | |
| | revert_arg_backup symbol_list_arg | |
| {$$ = [$1, $2];} | |
| ; | |
| revert_arg_backup | |
| : revert_arg_part | |
| {$$ = $1;} | |
| ; | |
| revert_arg_part | |
| : symbol_list_part | |
| {$$ = $1;} | |
| | revert_arg_backup '.' symbol_list_part | |
| {$$ = $1 + "." + $3;} | |
| //| revert_arg_backup BACKUP SCM_ARG '.' symbol_list_part | |
| //| revert_arg_backup BACKUP SCM_ARG ',' symbol_list_part | |
| //| revert_arg_backup BACKUP SCM_ARG symbol_list_part | |
| ; | |
| symbol_list_arg | |
| : SYMBOL_LIST | |
| {$$ = $1;} | |
| | SYMBOL_LIST '.' symbol_list_rev | |
| {$$ = $1.toString() + $2 + $3.toString();} | |
| | SYMBOL_LIST ',' symbol_list_rev | |
| {$$ = $1.toString() + $2 + $3.toString();} | |
| ; | |
| // extra syntax | |
| SYMBOL_LIST | |
| : symbol_list_part | |
| {$$ = $1;} | |
| ; | |
| simple_revert_context | |
| : symbol_list_part | |
| {$$ = $1;} | |
| ; | |
| grob_prop_path | |
| : grob_prop_spec | |
| {$$ = [$1];} | |
| | grob_prop_spec property_path | |
| {$$ = [$1, $2];} | |
| ; | |
| grob_prop_spec | |
| : symbol_list_rev | |
| {$$ = $1;} | |
| ; | |
| context_prop_spec | |
| : symbol_list_rev | |
| {$$ = $1;} | |
| ; | |
| event_chord | |
| : note_chord_element | |
| {$$ = $1;} | |
| | tempo_event | |
| {$$ = $1;} | |
| | simple_element post_events | |
| {$$ = rest({...$1, post_events: $2, locations: [@1, @2]});} | |
| //| CHORD_REPETITION optional_notemode_duration post_events | |
| //| MULTI_MEASURE_REST optional_notemode_duration post_events | |
| ; | |
| tempo_event | |
| : TEMPO steno_duration '=' tempo_range | |
| //{$$ = {tempo: $4, unit: $2};} | |
| {$$ = tempo($4, $2);} | |
| | TEMPO text steno_duration '=' tempo_range | |
| //{$$ = {tempo: $5, unit: $3, text: $2};} | |
| {$$ = tempo($5, $3, $2);} | |
| | TEMPO text | |
| {$$ = tempo(undefined, undefined, $2);} | |
| | TEMPO CMD_TEMPOLEGEND | |
| {$$ = tempo(undefined, undefined, $2);} | |
| ; | |
| tempo_range | |
| : unsigned_number | |
| {$$ = $1;} | |
| | unsigned_number '-' unsigned_number | |
| {$$ = {from: $1, to: $2};} | |
| ; | |
| simple_element | |
| //: DRUM_PITCH optional_notemode_duration | |
| : RESTNAME optional_notemode_duration | |
| {$$ = {name: $1, duration: $2};} | |
| ; | |
| optional_notemode_duration | |
| : %empty | |
| {$$ = null;} | |
| | duration | |
| {$$ = $1;} | |
| ; | |
| duration | |
| : steno_duration multipliers | |
| //{$$ = $1 + $2;} | |
| {$$ = duration({...$1, multipliers: $2});} | |
| ; | |
| steno_duration | |
| : unsigned_number dots | |
| //{$$ = $1 + $2;} | |
| {$$ = duration({number: $1, dots: $2.length});} | |
| | DURATION_IDENTIFIER dots | |
| {$$ = duration({number: $1, dots: $2.length});} | |
| ; | |
| DURATION_IDENTIFIER | |
| : CMD_BREVE | |
| {$$ = $1;} | |
| | CMD_LONGA | |
| {$$ = $1;} | |
| ; | |
| dots | |
| : %empty | |
| {$$ = "";} | |
| | dots dot | |
| {$$ = $1 + $2;} | |
| ; | |
| multipliers | |
| : %empty | |
| {$$ = [];} | |
| | multipliers '*' unsigned_number | |
| {$$ = [...$1, $3];} | |
| | multipliers '*' FRACTION | |
| {$$ = [...$1, $3];} | |
| //| multipliers '*' multiplier_scm | |
| ; | |
| repeated_music | |
| : REPEAT simple_string unsigned_number music | |
| {$$ = command($1, $2, $3, $4);} | |
| | REPEAT simple_string unsigned_number music ALTERNATIVE braced_music_list | |
| {$$ = command($1, $2, $3, $4, command($5, $6));} | |
| ; | |
| unsigned_number | |
| : UNSIGNED | |
| {$$ = $1;} | |
| //| POST_UNSIGNED | |
| // {$$ = $1;} | |
| //| NUMBER_IDENTIFIER | |
| //| embedded_scm | |
| ; | |
| simple_string | |
| : literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| ; | |
| // all kinds commands in music list, seems named as MUSIC_IDENTIFIER in lilypond's parser.yy | |
| music_identifier | |
| : zero_command | |
| {$$ = $1;} | |
| | CMD_CLEF string | |
| {$$ = command($1, $2);} | |
| | CMD_TIME FRACTION | |
| {$$ = command($1, $2);} | |
| | CMD_BAR string | |
| {$$ = command($1, $2);} | |
| | CMD_OMIT property_path | |
| {$$ = command($1, $2);} | |
| | CMD_OTTAVA property_path | |
| {$$ = command($1, $2);} | |
| | CMD_BARNUMBERCHECK scm_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_BARNUMBERCHECK unsigned_number | |
| {$$ = command($1, $2);} | |
| | CMD_MARK full_markup | |
| {$$ = command($1, $2);} | |
| // TODO: | |
| | CMD_INCLUDE string | |
| {$$ = command($1, $2);} | |
| | CMD_SKIP duration | |
| {$$ = command($1, $2);} | |
| //| CMD_PARENTHESIZE property_path | |
| // {$$ = command($1, $2);} | |
| | CMD_UNFOLDREPEATS music | |
| {$$ = command($1, $2);} | |
| | CMD_GRACE music | |
| {$$ = command($1, $2);} | |
| | CMD_ACCIACCATURA music | |
| {$$ = command($1, $2);} | |
| | CMD_APPOGGIATURA music | |
| {$$ = command($1, $2);} | |
| | CMD_SLASHEDGRACE music | |
| {$$ = command($1, $2);} | |
| | CMD_LANGUAGE string | |
| {$$ = command($1, $2);} | |
| | CMD_ONCE music_assign | |
| {$$ = command($1, $2);} | |
| | CMD_PARTIAL duration | |
| {$$ = command($1, $2);} | |
| | CMD_TUPLETSPAN duration | |
| {$$ = command($1, $2);} | |
| | CMD_TUPLETSPAN DEFAULT | |
| {$$ = command($1, $2);} | |
| | CMD_TUPLET FRACTION music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_TUPLET FRACTION duration music | |
| {$$ = command($1, $2, $3, $4);} | |
| | CMD_TWEAK property_path scalar | |
| {$$ = command($1, $2, $3);} | |
| | CMD_KEY PITCH COMMAND | |
| {$$ = command($1, $2, $3);} | |
| | CMD_TIMES FRACTION music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_AFTERGRACE music music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_PARALLELMUSIC scm_identifier composite_music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_SHAPE scm_identifier symbol | |
| {$$ = command($1, $2, $3);} | |
| | CMD_ACCIDENTALSTYLE grob_prop_spec | |
| {$$ = command($1, $2);} | |
| | CMD_NUMERICTIMESIGNATURE music_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_DEFAULTTIMESIGNATURE | |
| {$$ = command($1);} | |
| | CMD_BENDAFTER scm_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_COMPOUNDMETER scm_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_TRANSPOSITION pitch | |
| {$$ = command($1, chordElem($2, {locations: [@2, @2]}));} | |
| | CMD_ABSOLUTE music | |
| {$$ = command($1, $2);} | |
| | CMD_HIDE symbol | |
| {$$ = command($1, $2);} | |
| | CMD_CROSSSTAFF composite_music | |
| {$$ = command($1, $2);} | |
| | CMD_KEEPWITHTAG symbol | |
| {$$ = command($1, $2);} | |
| | CMD_TAG symbol composite_music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_SCALEDURATIONS FRACTION composite_music | |
| {$$ = command($1, $2, $3);} | |
| | CMD_TUPLETNEUTRAL music | |
| {$$ = command($1, $2);} | |
| | CMD_ARTICULATE music | |
| {$$ = command($1, $2);} | |
| | markup_font_size music | |
| {$$ = command($1, $2);} | |
| | pitch_mode_music | |
| {$$ = $1;} | |
| | "(" | |
| {$$ = $1;} | |
| | ")" | |
| {$$ = $1;} | |
| | "[" | |
| {$$ = $1;} | |
| | "]" | |
| {$$ = $1;} | |
| | DIVIDE | |
| {$$ = {proto: "Divide"};} | |
| | expressive_mark | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| zero_command | |
| : CMD_FERMATA | |
| {$$ = command($1);} | |
| | CMD_STEMUP | |
| {$$ = command($1);} | |
| | CMD_STEMDOWN | |
| {$$ = command($1);} | |
| | CMD_STEMNEUTRAL | |
| {$$ = command($1);} | |
| | CMD_MERGEDIFFERENTLYDOTTEDON | |
| {$$ = command($1);} | |
| | CMD_MERGEDIFFERENTLYHEADEDON | |
| {$$ = command($1);} | |
| | CMD_VOICE_NUMBER | |
| {$$ = command($1);} | |
| | CMD_SCORE | |
| {$$ = command($1);} | |
| | CMD_VOICE | |
| {$$ = command($1);} | |
| | CMD_STAFF | |
| {$$ = command($1);} | |
| | CMD_PIANOSTAFF | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIO | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIOARROWDOWN | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIOARROWUP | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIONORMAL | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIOBRACKET | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIOPARENTHESIS | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIOPARENTHESISDASHED | |
| {$$ = command($1);} | |
| | CMD_GLISSANDO | |
| {$$ = command($1);} | |
| | CMD_MORDENT | |
| {$$ = command($1);} | |
| | CMD_POWERCHORDS | |
| {$$ = command($1);} | |
| | CMD_PRALL | |
| {$$ = command($1);} | |
| //| CMD_SUSTAINOFF | |
| // {$$ = command($1);} | |
| //| CMD_SUSTAINON | |
| // {$$ = command($1);} | |
| | CMD_TRILL | |
| {$$ = command($1);} | |
| | CMD_TURN | |
| {$$ = command($1);} | |
| | CMD_POINTANDCLICKOFF | |
| {$$ = command($1);} | |
| | CMD_UPBOW | |
| {$$ = command($1);} | |
| | CMD_DOWNBOW | |
| {$$ = command($1);} | |
| | CMD_BREATHE | |
| {$$ = command($1);} | |
| | CMD_STARTTEXTSPAN | |
| {$$ = command($1);} | |
| | CMD_STOPTEXTSPAN | |
| {$$ = command($1);} | |
| | CMD_FLAGEOLET | |
| {$$ = command($1);} | |
| | CMD_SLURDASHED | |
| {$$ = command($1);} | |
| | CMD_SLURSOLID | |
| {$$ = command($1);} | |
| | CMD_BREAK | |
| {$$ = command($1);} | |
| | CMD_PAGEBREAK | |
| {$$ = command($1);} | |
| | CMD_STARTTRILLSPAN | |
| {$$ = command($1);} | |
| | CMD_STOPTRILLSPAN | |
| {$$ = command($1);} | |
| | CMD_CADENZAON | |
| {$$ = command($1);} | |
| | CMD_CADENZAOFF | |
| {$$ = command($1);} | |
| | CMD_CRESC | |
| {$$ = command($1);} | |
| | CMD_CRESCTEXTCRESC | |
| {$$ = command($1);} | |
| | CMD_CRESCHAIRPIN | |
| {$$ = command($1);} | |
| | CMD_DIM | |
| {$$ = command($1);} | |
| | CMD_DIMTEXTDIM | |
| {$$ = command($1);} | |
| | CMD_DYNAMICUP | |
| {$$ = command($1);} | |
| | CMD_HIDENOTES | |
| {$$ = command($1);} | |
| | CMD_UNHIDENOTES | |
| {$$ = command($1);} | |
| | CMD_NEWSPACINGSECTION | |
| {$$ = command($1);} | |
| | CMD_NOBEAM | |
| {$$ = command($1);} | |
| | CMD_ONEVOICE | |
| {$$ = command($1);} | |
| | CMD_PHRASINGSLURDOWN | |
| {$$ = command($1);} | |
| | CMD_PHRASINGSLURNEUTRAL | |
| {$$ = command($1);} | |
| | CMD_PHRASINGSLURUP | |
| {$$ = command($1);} | |
| | CMD_SLURDOWN | |
| {$$ = command($1);} | |
| | CMD_SLURNEUTRAL | |
| {$$ = command($1);} | |
| | CMD_SLURUP | |
| {$$ = command($1);} | |
| | CMD_TIEDOWN | |
| {$$ = command($1);} | |
| | CMD_TIENEUTRAL | |
| {$$ = command($1);} | |
| | CMD_TIEUP | |
| {$$ = command($1);} | |
| | CMD_PARENTHESIZE | |
| {$$ = command($1);} | |
| | CMD_TUPLETUP | |
| {$$ = command($1);} | |
| | CMD_TUPLETDOWN | |
| {$$ = command($1);} | |
| | CMD_SHIFTON | |
| {$$ = command($1);} | |
| | CMD_REPEATTIE | |
| {$$ = command($1);} | |
| ; | |
| // extra syntax | |
| expressive_mark | |
| : CMD_CRESCENDO_BEGIN | |
| {$$ = $1;} | |
| | CMD_DECRESCENDO_BEGIN | |
| {$$ = $1;} | |
| | CMD_DYNAMICS_END | |
| {$$ = $1;} | |
| | CMD_FERMATA | |
| {$$ = $1;} | |
| | CMD_TWEAK property_path scalar | |
| {$$ = command($1, $2, $3);} | |
| | CMD_BENDAFTER scm_identifier | |
| {$$ = command($1, $2);} | |
| | CMD_DYNAMIC_MARKINGS | |
| {$$ = command($1);} | |
| | CMD_MARCATO | |
| {$$ = command($1);} | |
| | CMD_STOPPED | |
| {$$ = command($1);} | |
| | CMD_TENUTO | |
| {$$ = command($1);} | |
| | CMD_STACCATISSIMO | |
| {$$ = command($1);} | |
| | CMD_ACCENT | |
| {$$ = command($1);} | |
| | CMD_STACCATO | |
| {$$ = command($1);} | |
| | CMD_PORTATO | |
| {$$ = command($1);} | |
| | CMD_MORDENT | |
| {$$ = command($1);} | |
| | CMD_PRALL | |
| {$$ = command($1);} | |
| | CMD_TURN | |
| {$$ = command($1);} | |
| | CMD_ARPEGGIO | |
| {$$ = command($1);} | |
| | CMD_TRILL | |
| {$$ = command($1);} | |
| | CMD_STARTTRILLSPAN | |
| {$$ = command($1);} | |
| | CMD_STOPTRILLSPAN | |
| {$$ = command($1);} | |
| | "~" | |
| {$$ = $1;} | |
| | "(" | |
| {$$ = $1;} | |
| | ")" | |
| {$$ = $1;} | |
| | "\(" | |
| {$$ = $1;} | |
| | "\)" | |
| {$$ = $1;} | |
| ; | |
| // extra syntax | |
| pitch_mode_music | |
| : CMD_RELATIVE pitch music | |
| {$$ = command($1, chordElem($2, {locations: [@2, @2]}), $3);} | |
| | CMD_RELATIVE music | |
| {$$ = command($1, $2);} | |
| ; | |
| pitch_or_music | |
| //: pitch exclamations questions octave_check maybe_notemode_duration erroneous_quotes optional_rest post_events | |
| : pitch exclamations questions optional_notemode_duration optional_rest post_events | |
| {$$ = chord([chordElem($1, {locations: [@1, @1]})], $4, {exclamations: $2, questions: $3, rest: $5, post_events: $6, locations: [@1, @6]});} | |
| //| new_chord post_events | |
| // {$$ = briefChord($1, {post_events: $2});} | |
| ; | |
| new_chord | |
| //: steno_tonic_pitch maybe_notemode_duration | |
| : pitch optional_notemode_duration | |
| {$$ = {pitch: $1, duration: $2};} | |
| //| steno_tonic_pitch optional_notemode_duration chord_separator chord_items | |
| | pitch optional_notemode_duration chord_separator chord_items | |
| {$$ = {pitch: $1, duration: $2, separator: $3, items: $4};} | |
| ; | |
| chord_items | |
| : %empty | |
| {$$ = [];} | |
| | chord_items chord_item | |
| {$$ = $1.concat($2);} | |
| ; | |
| chord_item | |
| : chord_separator | |
| {$$ = $1;} | |
| | step_numbers | |
| {$$ = $1;} | |
| | CHORD_MODIFIER | |
| {$$ = $1;} | |
| ; | |
| // m, m7, dim, dim7, aug, maj, maj7 | |
| CHORD_MODIFIER | |
| : CHORD_MODIFIER_WORD | |
| {$$ = $1;} | |
| //| CHORD_MODIFIER_WORD UNSIGNED | |
| // {$$ = $1 + $2;} | |
| ; | |
| step_numbers | |
| : step_number | |
| {$$ = $1;} | |
| | step_numbers dot step_number | |
| {$$ = $1 + $2 + $3;} | |
| ; | |
| step_number | |
| : UNSIGNED | |
| {$$ = $1;} | |
| | UNSIGNED '+' | |
| {$$ = $1 + $2;} | |
| | UNSIGNED CHORD_MINUS | |
| {$$ = $1 + $2;} | |
| ; | |
| maybe_notemode_duration | |
| : %empty | |
| {$$ = null;} | |
| | duration | |
| {$$ = $1;} | |
| ; | |
| steno_tonic_pitch | |
| : TONICNAME_PITCH quotes | |
| {$$ = $1 + $2;} | |
| ; | |
| CHORD_BASS | |
| : "/" "+" | |
| {$$ = $1 + $2;} | |
| ; | |
| CHORD_CARET | |
| : "^" | |
| {$$ = $1;} | |
| ; | |
| CHORD_COLON | |
| : ":" | |
| {$$ = $1;} | |
| ; | |
| CHORD_MINUS | |
| : "-" | |
| {$$ = $1;} | |
| ; | |
| CHORD_SLASH | |
| : "/" | |
| {$$ = $1;} | |
| ; | |
| chord_separator | |
| : CHORD_COLON | |
| {$$ = $1;} | |
| | CHORD_CARET | |
| {$$ = $1;} | |
| //| CHORD_SLASH steno_tonic_pitch | |
| | CHORD_SLASH pitch | |
| {$$ = $1 + $2;} | |
| //| CHORD_BASS steno_tonic_pitch | |
| | CHORD_BASS pitch | |
| {$$ = $1 + $2;} | |
| ; | |
| exclamations | |
| : %empty | |
| {$$ = [];} | |
| | exclamations '!' | |
| {$$ = $1.concat($2);} | |
| ; | |
| questions | |
| : %empty | |
| {$$ = [];} | |
| | questions '?' | |
| {$$ = $1.concat($2);} | |
| ; | |
| post_events | |
| : %empty | |
| {$$ = [];} | |
| | post_events post_event | |
| {$$ = $1.concat($2);} | |
| ; | |
| note_chord_element | |
| : chord_body optional_notemode_duration post_events | |
| {$$ = chord($1, $2, {withAngle: true, post_events: $3, locations: [@1, @2]});} | |
| ; | |
| chord_body | |
| : "<" chord_body_elements ">" | |
| {$$ = $2;} | |
| //| FIGURE_OPEN figure_list FIGURE_CLOSE | |
| ; | |
| chord_body_elements | |
| : %empty | |
| {$$ = [];} | |
| | chord_body_elements chord_body_element | |
| {$$ = $1.concat([$2]);} | |
| ; | |
| chord_body_element | |
| //: pitch_or_tonic_pitch exclamations questions octave_check post_events %prec ':' | |
| : pitch_or_tonic_pitch exclamations questions post_events | |
| //{$$ = $1 + $2 + $3 + $4;} | |
| {$$ = chordElem($1, {locations: [@1, @4], exclamations: $2, questions: $3, post_events: $4});} | |
| //| DRUM_PITCH post_events %prec ':' | |
| | music_function_chord_body | |
| {$$ = $1;} | |
| //| post_event | |
| ; | |
| music_function_chord_body | |
| //: music_function_call | |
| //| MUSIC_IDENTIFIER | |
| //| embedded_scm | |
| : music_identifier | |
| {$$ = $1;} | |
| ; | |
| pitch_or_tonic_pitch | |
| : pitch | |
| {$$ = $1;} | |
| //| steno_tonic_pitch | |
| ; | |
| /*// extra syntax | |
| pitches | |
| : pitches pitch | |
| {$$ = $1.concat([$2]);} | |
| | pitch | |
| {$$ = [$1];} | |
| ;*/ | |
| pitch | |
| : PITCH quotes | |
| {$$ = $1 + $2;} | |
| //| steno_pitch | |
| // extra formula | |
| //| PLACEHOLDER_PITCH | |
| // {$$ = $1;} | |
| ; | |
| quotes | |
| : %empty | |
| {$$ = "";} | |
| | sub_quotes | |
| {$$ = $1;} | |
| | sup_quotes | |
| {$$ = $1;} | |
| ; | |
| sup_quotes | |
| : "'" | |
| {$$ = $1;} | |
| | sup_quotes "'" | |
| {$$ = $1 + $2;} | |
| ; | |
| sub_quotes | |
| : "," | |
| {$$ = $1;} | |
| | sub_quotes "," | |
| {$$ = $1 + $2;} | |
| ; | |
| post_event | |
| : post_event_nofinger | |
| {$$ = $1;} | |
| | '-' fingering | |
| //{$$ = {type: "fingering", direction: "middle", value: $2};} | |
| {$$ = postEvent("middle", fingering($2));} | |
| ; | |
| HYPHEN | |
| : PRE_HYPHEN "-" | |
| {$$ = "--";} | |
| | PRE_HYPHEN PRE_HYPHEN | |
| {$$ = "--";} | |
| ; | |
| EXTENDER | |
| : PRE_EXTENDER "_" | |
| {$$ = "__";} | |
| | PRE_EXTENDER PRE_EXTENDER | |
| {$$ = "__";} | |
| ; | |
| post_event_nofinger | |
| : '^' fingering | |
| //{$$ = {direction: "up", fingering: $2};} | |
| {$$ = postEvent("up", fingering($2));} | |
| | '_' fingering | |
| //{$$ = {direction: "down", fingering: $2};} | |
| {$$ = postEvent("down", fingering($2));} | |
| | direction_less_event | |
| {$$ = $1;} | |
| | script_dir music_function_call | |
| {$$ = postEvent($1, $2);} | |
| | HYPHEN | |
| {$$ = $1;} | |
| | EXTENDER | |
| {$$ = $1;} | |
| | script_dir direction_reqd_event | |
| {$$ = postEvent($1, $2);} | |
| | script_dir direction_less_event | |
| {$$ = postEvent($1, $2);} | |
| // extra formula | |
| | script_dir zero_command | |
| {$$ = postEvent($1, $2);} | |
| // extra formula | |
| | script_dir expressive_mark | |
| {$$ = postEvent($1, $2);} | |
| // extra formula | |
| | expressive_mark | |
| {$$ = postEvent(null, $1);} | |
| // extra formula | |
| | CMD_SUSTAINOFF | |
| {$$ = postEvent(null, $1);} | |
| // extra formula | |
| | CMD_SUSTAINON | |
| {$$ = postEvent(null, $1);} | |
| // extra formula | |
| | "[" | |
| {$$ = $1;} | |
| // extra formula | |
| | "]" | |
| {$$ = $1;} | |
| // extra formula | |
| | script_dir "[" | |
| {$$ = postEvent($1, $2);} | |
| // extra formula | |
| | script_dir "]" | |
| {$$ = postEvent($1, $2);} | |
| // extra formula | |
| | "(" | |
| {$$ = $1;} | |
| // extra formula | |
| | ")" | |
| {$$ = $1;} | |
| // extra formula | |
| | script_dir variable_command | |
| {$$ = postEvent($1, $2);} | |
| ; | |
| direction_reqd_event | |
| : gen_text_def | |
| {$$ = $1;} | |
| | script_abbreviation | |
| {$$ = $1;} | |
| ; | |
| gen_text_def | |
| : full_markup | |
| {$$ = $1;} | |
| | literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| | embedded_scm | |
| {$$ = $1;} | |
| ; | |
| script_abbreviation | |
| : '^' | |
| {$$ = $1;} | |
| | '+' | |
| {$$ = $1;} | |
| | '-' | |
| {$$ = $1;} | |
| | '!' | |
| {$$ = $1;} | |
| | '>' | |
| {$$ = $1;} | |
| | dot | |
| {$$ = $1;} | |
| | '_' | |
| {$$ = $1;} | |
| ; | |
| direction_less_event | |
| : string_number_event | |
| {$$ = $1;} | |
| //| EVENT_IDENTIFIER | |
| | tremolo_type | |
| {$$ = $1;} | |
| | event_function_event | |
| {$$ = $1;} | |
| ; | |
| string_number_event | |
| : E_UNSIGNED | |
| {$$ = $1;} | |
| ; | |
| tremolo_type | |
| : ':' | |
| {$$ = ":";} | |
| | ':' UNSIGNED | |
| {$$ = ":" + $2;} | |
| ; | |
| event_function_event | |
| : EVENT_FUNCTION function_arglist | |
| ; | |
| music_function_call | |
| : MUSIC_FUNCTION function_arglist | |
| ; | |
| script_dir | |
| : "_" | |
| {$$ = "down";} | |
| | "^" | |
| {$$ = "up";} | |
| | "-" | |
| {$$ = "middle";} | |
| ; | |
| fingering | |
| : UNSIGNED | |
| {$$ = $1;} | |
| ; | |
| full_markup | |
| : markup_mode markup_top | |
| {$$ = command($1, ...$2);} | |
| | markup_mode_word | |
| {$$ = $1;} | |
| ; | |
| markup_mode | |
| : MARKUP | |
| {$$ = $1;} | |
| ; | |
| markup_top | |
| : markup_list | |
| {$$ = $1;} | |
| | markup_head_1_list simple_markup | |
| //{$$ = {head: $1, body: $2};} | |
| {$$ = $1.concat([$2]);} | |
| | simple_markup_noword | |
| {$$ = [$1];} | |
| ; | |
| markup_mode_word | |
| : markup_mode markup_word | |
| {$$ = command($1, $2);} | |
| ; | |
| output_def | |
| : output_def_body '}' | |
| {$$ = $1;} | |
| ; | |
| output_def_body | |
| : output_def_head_with_mode_switch '{' | |
| {$$ = block("score", $1);} | |
| | output_def_body assignment | |
| { | |
| $1.body.push($2); | |
| $$ = $1; | |
| } | |
| | output_def_body music_or_context_def | |
| { | |
| $1.body.push($2); | |
| $$ = $1; | |
| } | |
| | output_def_body scm_identifier | |
| { | |
| $1.body.push($2); | |
| $$ = $1; | |
| } | |
| //| output_def_body embedded_scm_active | |
| //| output_def_body SCM_TOKEN | |
| //| output_def_body error | |
| ; | |
| output_def_head_with_mode_switch | |
| : output_def_head | |
| {$$ = $1;} | |
| ; | |
| output_def_head | |
| : PAPER | |
| {$$ = $1;} | |
| | MIDI | |
| {$$ = $1;} | |
| | LAYOUT | |
| {$$ = $1;} | |
| ; | |
| music_or_context_def | |
| : music_assign | |
| {$$ = $1;} | |
| | context_def_spec_block | |
| {$$ = $1;} | |
| ; | |
| context_def_spec_block | |
| : CONTEXT '{' context_def_spec_body '}' | |
| {$$ = block("context", $1, $3);} | |
| ; | |
| context_def_spec_body | |
| : %empty | |
| {$$ = [];} | |
| | context_def_spec_body context_mod | |
| {$$ = $1.concat([$2]);} | |
| | context_def_spec_body context_modification | |
| {$$ = $1.concat([$2]);} | |
| | context_def_spec_body context_mod_arg | |
| {$$ = $1.concat([$2]);} | |
| ; | |
| context_mod_arg | |
| : embedded_scm | |
| {$$ = $1;} | |
| | composite_music | |
| {$$ = $1;} | |
| ; | |
| context_modification | |
| : WITH '{' context_mod_list '}' | |
| {$$ = command($1, inlineBlock($3));} | |
| | WITH context_modification_arg | |
| {$$ = command($1, $2);} | |
| ; | |
| context_modification_arg | |
| : embedded_scm | |
| {$$ = $1;} | |
| //| MUSIC_IDENTIFIER | |
| | music_identifier | |
| {$$ = $1;} | |
| ; | |
| context_mod_list | |
| : %empty | |
| {$$ = [];} | |
| | context_mod_list context_mod | |
| {$$ = $1.concat($2);} | |
| | context_mod_list context_mod_arg | |
| {$$ = $1.concat($2);} | |
| ; | |
| context_mod | |
| : property_operation | |
| {$$ = $1;} | |
| //| context_def_mod SYMBOL | |
| | context_def_mod symbol | |
| {$$ = command($1, $2);} | |
| //| context_def_mod embedded_scm | |
| ; | |
| property_operation | |
| : symbol '=' scalar | |
| {$$ = assignment($1, $3);} | |
| | UNSET symbol | |
| {$$ = command($1, $2);} | |
| | OVERRIDE revert_arg '=' scalar | |
| {$$ = command($1, assignment($2, $4));} | |
| | REVERT revert_arg | |
| {$$ = command($1, $2);} | |
| ; | |
| symbol | |
| : literal_string | |
| {$$ = $1;} | |
| | SYMBOL | |
| {$$ = $1;} | |
| | embedded_scm_bare | |
| {$$ = $1;} | |
| ; | |
| scalar | |
| //: embedded_scm_arg | |
| : pitch_or_music | |
| {$$ = $1;} | |
| | scm_identifier | |
| {$$ = $1;} | |
| | bare_number | |
| {$$ = $1;} | |
| | '-' bare_number | |
| {$$ = -$1;} | |
| | string | |
| {$$ = $1;} | |
| | symbol_list_part_bare '.' property_path | |
| {$$ = $1 + "." + $3;} | |
| | symbol_list_part_bare ',' property_path | |
| {$$ = $1 + "," + $3;} | |
| // extra formula | |
| | UNSIGNED ',' property_path | |
| {$$ = $1 + "," + $3;} | |
| // extra formula | |
| | COMMAND | |
| {$$ = $1;} | |
| ; | |
| bare_number | |
| : bare_number_common | |
| {$$ = $1;} | |
| | UNSIGNED | |
| {$$ = Number($1);} | |
| //| UNSIGNED NUMBER_IDENTIFIER | |
| ; | |
| context_def_mod | |
| : CONSISTS | |
| {$$ = $1;} | |
| | REMOVE | |
| {$$ = $1;} | |
| | ACCEPTS | |
| {$$ = $1;} | |
| | DEFAULTCHILD | |
| {$$ = $1;} | |
| | DENIES | |
| {$$ = $1;} | |
| | ALIAS | |
| {$$ = $1;} | |
| | TYPE | |
| {$$ = $1;} | |
| | DESCRIPTION | |
| {$$ = $1;} | |
| | NAME | |
| {$$ = $1;} | |
| ; | |
| embedded_scm_active | |
| //: SCM_IDENTIFIER | |
| : scm_identifier | |
| {$$ = $1;} | |
| | scm_function_call | |
| {$$ = $1;} | |
| | lookup | |
| {$$ = $1;} | |
| ; | |
| /*// extra syntax, maybe the substitution for embedded_scm_active in lilypond's parser | |
| embedded_scheme_expression | |
| : "#" scheme_expression | |
| {$$ = scheme($2);} | |
| ;*/ | |
| // extra syntax | |
| scheme_expression | |
| : SCM_TRUE | |
| {$$ = true;} | |
| | SCM_FALSE | |
| {$$ = false;} | |
| | SCM_HEX | |
| {$$ = $1} | |
| | SCM_COLON | |
| {$$ = $1} | |
| | bare_number | |
| {$$ = $1;} | |
| | INT | |
| {$$ = $1;} | |
| | "(" ")" | |
| {$$ = null;} | |
| | "+" "inf.0" | |
| {$$ = $1 + $2;} | |
| | "-" "inf.0" | |
| {$$ = $1 + $2;} | |
| | "(" scheme_expression "." scheme_expression ")" | |
| {$$ = schemePair($2, $4);} | |
| | "(" scheme_expression scheme_args ")" | |
| {$$ = schemeFunction($2, $3);} | |
| | scheme_token | |
| {$$ = $1;} | |
| | scheme_token "?" | |
| {$$ = $1 + $2;} | |
| | "'" scheme_expression | |
| {$$ = schemePointer($2);} | |
| | "`" scheme_expression | |
| {$$ = schemePointer($2);} | |
| | "#" "{" lilypond "#" "}" | |
| {$$ = schemeEmbed($3);} | |
| | "*" | |
| {$$ = $1;} | |
| ; | |
| scheme_args | |
| : %empty | |
| {$$ = [];} | |
| | scheme_args scheme_expression | |
| {$$ = $1.concat($2);} | |
| ; | |
| scheme_token | |
| : bare_number | |
| {$$ = $1;} | |
| | symbol | |
| {$$ = $1;} | |
| | symbol ":" scheme_token | |
| {$$ = $1 + $2 + $3;} | |
| | symbol ":" ":" scheme_token | |
| {$$ = $1 + $2 + $3 + $4;} | |
| ; | |
| optional_rest | |
| : %empty | |
| {$$ = null;} | |
| | REST | |
| {$$ = $1;} | |
| ; | |
| // extra syntax, the substitution of STRING | |
| literal_string | |
| : STRING | |
| {$$ = string($1);} | |
| ; | |