X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmy-lily-lexer.hh;h=b3c32f6f5273938ae9a1221e63c3f0d3320541ee;hb=832c21ee509c9ad488e1490ad59a650e89c8f53a;hp=8aa5319c28cb28b6a4298ae83df4cd62820e5103;hpb=69b9cead5afe7164b9053d26eba582fec3825ef8;p=lilypond.git diff --git a/lily/include/my-lily-lexer.hh b/lily/include/my-lily-lexer.hh index 8aa5319c28..b3c32f6f52 100644 --- a/lily/include/my-lily-lexer.hh +++ b/lily/include/my-lily-lexer.hh @@ -1,64 +1,94 @@ /* - lexer.hh -- declare My_lily_lexer + lexer.hh -- declare Lily_lexer source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ -#ifndef LEXER_HH -#define LEXER_HH +#ifndef MY_LILY_LEXER_HH +#define MY_LILY_LEXER_HH -#include +#include "includable-lexer.hh" +#include "input.hh" #include "lily-proto.hh" -#include "lily-proto.hh" -#include "fproto.hh" -#include "varray.hh" +#include "flower-proto.hh" +#include "array.hh" #include "string.hh" -#include "includable-lexer.hh" #include "duration.hh" +#include "pitch.hh" +#include "smobs.hh" -bool busy_parsing(); -void kill_lexer(); -void set_lexer(); - +bool busy_parsing (); +void kill_lexer (); +void set_lexer (); -/// lexer for Mudela -class My_lily_lexer : public Includable_lexer { +/* + TODO: this has a lot of SCM objects. Smobify me. + */ +class Lily_lexer : public Includable_lexer +{ + DECLARE_SMOBS(Lily_lexer,); +public: + SCM scopes_; + SCM encoding_; + +private: int lookup_keyword (String); int scan_bare_word (String); + SCM scan_markup_word (String); int scan_escaped_word (String); + int identifier_type (SCM); + char escaped_char (char) const; - bool post_quotes_b_; - char escaped_char(char) const; public: - String main_input_str_; - void * lexval_l; + String main_input_name_; + void *lexval; + bool main_input_b_; - Notename_table *note_tab_p_; - Dictionary *identifier_p_dict_p_; - Keyword_table * keytable_p_; - int errorlevel_i_; + Sources *sources_; - /* *************** */ + /* Scheme hash tables with (oct name acc) values, and symbol keys. */ + SCM chordmodifier_tab_; + SCM pitchname_tab_stack_; + Keyword_table *keytable_; + int error_level_; + Input last_input_; + + Lily_lexer (Sources*); + Lily_lexer (Lily_lexer const&); + ~Lily_lexer (); + + int yylex (); + + void prepare_for_next_token (); + int try_special_identifiers (SCM* ,SCM); + Input here_input () const; + + void add_scope (SCM); + SCM remove_scope (); + void start_main_input (); - void clear_notenames(); - Identifier*lookup_identifier (String s); - Melodic_req* lookup_melodic_req_l (String s); - void push_note_state(); - void push_lyric_state(); - void pop_state(); + + SCM lookup_identifier (String s); + SCM lookup_identifier_symbol (SCM s); + void push_chord_state (SCM tab); + void push_figuredbass_state (); + void push_lyric_state (); + void push_initial_state (); + void push_markup_state (); + void push_note_state (SCM tab); + void pop_state (); void LexerError (char const *); - My_lily_lexer(); - void set_identifier (String,Identifier*i); - ~My_lily_lexer(); - int yylex(); - void print_declarations (bool init_b) const; - void add_notename (String, Melodic_req*); - bool note_state_b() const; - bool lyric_state_b() const; + void set_encoding (String); + SCM encoding () const; + void set_identifier (SCM name_string, SCM); + bool is_note_state () const; + bool is_chord_state () const; + bool is_lyric_state () const; + bool is_figure_state () const; }; -#endif +#endif /* MY_LILY_LEXER_HH */