Fehlersuche

Begonnen von erich, Samstag, 30. März 2019, 09:35

« vorheriges - nächstes »

erich

Hallo allen

Mein Ziel ist es, als Notennamen auch die römischen Zahlennamen {o,i,ii,iii,iv,v,vi,vii,iix,ix, x, xi} verwenden zu können.

Beschreibung des Versuchs:

1.
Ich erweitere die Datei
\usr\local\lilypond\usr\share\lilypond\current\scm\define-note-names.scm
nach Zeile 94 um die Zeile
(o  . ,(ly:make-pitch -1 2 NATURAL))
Die Wirkung soll sein, dass mit o die Note E ausgegeben werden kann.

Das Script
\version "2.19.83"
\score {
  \new Voice { o'1 }
}

gibt korrekt das E aus.

2.
Ich füge im Ordner  \usr\local\lilypond\usr\share\lilypond\current\ly die Datei test.ly
o =
#(define-music-function () ()
   #{#})

ein und lasse das Script
\version "2.19.83"
\include "test.ly"
\score {
  \new Voice { o'1 }
}

ausführen; ich erhalte als Fehlermeldung:

/usr/local/lilypond/usr/share/lilypond/current/ly/test.ly:1:1: Fehler: syntax error, unexpected NOTENAME_PITCH

o =


3.
Ich habe den Eindruck, dass früher in vergleichbaren Situationen keine Fehlermeldung auftrat, kann es aber nicht überprüfen, da ich die Daten nicht mehr habe.

Frage: mache ich einen Fehler oder LilyPond?

Gruß Erich



harm6

Hallo Erich,

hier geht es doch um zwei grundsätzlich verschiedene Sachen.
(1)
Neue (zusätzliche) Notennamen.
Das funktioniert ja auch, obwohl ich das immer im ly-file machen würde:
#(define pitchnames
  (append
    (list
      (cons 'o (ly:make-pitch -1 2 NATURAL))
      ;; other syntax:
      `(i . ,(ly:make-pitch -1 2 SHARP))
      )
    (assoc-get 'nederlands language-pitch-names)))
 
#(ly:parser-set-note-names pitchnames)

{ o'1 i' }


(2)
Eine Funktion, die genauso heißt wie ein Notenname.
Ein minimal wäre in einem ly-file:
bes = #(define-music-function ()() #{#})

Das funktioniert nicht, getestet mit
2.10.33
2.12.3
2.14.2
2.16.2
2.18.2
2.19.82
2.21.0

Wie sollte es auch??

Gruß,
  Harm

erich

Hallo Harm

wenn ich als test-Funktion
O =
#(define-music-function () ()
   #{#})

wähle und das Script
\version "2.19.83"
\include "test.ly"
\score {
  \new Voice {o'1 \O }
}

ausführen lasse, so erhalte ich keine Fehlermeldung.

Dass es sich um einen Namenkonflikt zu handeln scheint, ist schon klar. Jedenfalls dürfte es nicht daran liegen, dass die Anweisung leer ist. Ich habe das Beispiel hier soweit verzürzt, auch wenn ich sonst keine leere Anweisung verwende, gibt es neuerdings eine Fehlermeldung, wie mir scheint.

Gruß Erich

harm6

Zitat von: erich am Samstag, 30. März 2019, 11:56
Hallo Harm

wenn ich als test-Funktion
O =
#(define-music-function () ()
   #{#})

wähle und das Script
\version "2.19.83"
\include "test.ly"
\score {
  \new Voice {o'1 \O }
}

ausführen lasse, so erhalte ich keine Fehlermeldung.

O ist ja auch kein Natenname.

Zitat
Dass es sich um einen Namenkonflikt zu handeln scheint, ist schon klar. Jedenfalls dürfte es nicht daran liegen, dass die Anweisung leer ist. Ich habe das Beispiel hier soweit verzürzt, auch wenn ich sonst keine leere Anweisung verwende, gibt es neuerdings eine Fehlermeldung, wie mir scheint.

Gruß Erich

Von welcher Fehlermeldung redest Du?
Die bereits gepostete Fehlermeldung bezieht sich ja auf den "Namenkonflikt"


Gruß,
  Harm

erich

Hallo Harm

noch ein Hinweis: das Script
\version "2.19.83"
\language "deutsch"
\include "test.ly"
\language "nederlands"
\score {
  \new Voice {o'1 }
}

ergibt keine Fehlermeldung.

Gruß Erich

harm6

Erich,

warum versuchst Du Notennamen und Funktionen gleich zu benennen?
Ich halte das für Unsinn.
Es funktioniert nur wenn LilyPnd's parser in die Lage versetzt wird klar zu unterscheiden wo es sich um einen Notennamen und wo um eine Funktionsdefinition handelt.
Möglicherweise geht:

#(define bes (define-music-function ()() #{ cis'1 #}))
\bes

Ist aber trotzdem Unsinn, imho

-Harm


erich

#6
Hallo Harm,

Eigentlich ist o kein römisches Zahlzeichen, ergänzt diese jedoch sinnvoll. Als Funktion bedeutet \o 2 setze oben  zwei weitere (Hilfs-)Linien.
Innerhalb eines score-Bereichs sind beide Verwendungen syntaktisch eindeutig.

Die Schwierigkeit entsteht dadurch, dass ein Notenname mit einem Buchstaben beginnen muss; ich könnte auch versuchen, einen anderen 0-ähnlichen Buchstaben zu verwenden.

Neu 16:06

Inzwischen halte ich es für einen Parserfehler. Das Script

\version "2.19.83"
c


führt zur Fehlermeldung "unexpected NOTENAME_PITCH" : an dieser Stelle hat der Parser gar keinen NOTENAME_PITCH zu erwarten

Hingegen ist das Script

\version "2.19.83"
{c}


fehlerfrei.

Gruß Erich








Malte

Hallo Erich,

ich hab den Thread nicht ganz mitverfolgt. Aber ...
Zitat von: erich am Samstag, 30. März 2019, 13:55
Inzwischen halte ich es für einen Parserfehler. Das Script

\version "2.19.83"
c


führt zur Fehlermeldung "unexpected NOTENAME_PITCH" : an dieser Stelle hat der Parser gar keinen NOTENAME_PITCH zu erwarten
... der Parser sagt dir doch, daß er eben keinen NOTENAME_PITCH erwartet und trotzdem einen gefunden hat ... Insofern verstehe ich nicht, wo hier der Fehler liegen sollte.

Viele Grüße
Malte

erich

Hallo Malte, ich lese die Fehlermeldung so: es wird etwas als NOTENAME_PITCH erkannt, der aber nicht erwartet wird.
Der Parserfehler besteht meiner Meinung darin, überhaupt etwas als NOTENAME_PITCH zu erkennen. Gruß Erich


erich

Hallo allen

Um es etwas plastischer zu machen:

Ich füge in  \usr\local\lilypond\usr\share\lilypond\current\scm\define-note-names.scm die Definition einer Sprache dummy ein (dummy . (
                        (leer  .  ,( ly:make-pitch -1 0 NATURAL))))

Das Skribt
\version "2.19.83"
\language "dummy"
\include "pythagoreisch-eq.ly"
\score {
  \new Voice {\eClef \o 1 o'1 o'' }

wird fehlerfrei interpretiert.

Wird die Sprachanweisung gelöscht
\version "2.19.83"
%\language "dummy"
\include "pythagoreisch-eq.ly"
\score {
  \new Voice {\eClef \o 1 o'1 o'' }

ergibt das wieder die Fehlermeldung.

Gruß Erich