int identifier_type (SCM);
char escaped_char (char) const;
+ Lily_parser *parser_;
Keyword_table *keytable_;
SCM scopes_;
SCM start_module_;
void *lexval;
Input *lexloc;
bool is_main_input_;
-
+
Sources *sources_;
/* Scheme hash tables with (oct name acc) values, and symbol keys. */
int error_level_;
Input last_input_;
- Lily_lexer (Sources *);
+ Lily_lexer (Sources *, Lily_parser *);
Lily_lexer (Lily_lexer const &);
int yylex ();
#include "scm-hash.hh"
#include "source-file.hh"
#include "warn.hh"
+#include "program-option.hh"
+#include "lily-parser.hh"
static Keyword_ent the_key_tab[]
= {
{0, 0}
};
-Lily_lexer::Lily_lexer (Sources *sources)
+Lily_lexer::Lily_lexer (Sources *sources, Lily_parser *parser)
{
+ parser_ = parser;
keytable_ = new Keyword_table (the_key_tab);
chordmodifier_tab_ = SCM_EOL;
pitchname_tab_stack_ = SCM_EOL;
void
Lily_lexer::start_main_input ()
{
- // yy_flex_debug = 1;
+ yy_flex_debug = get_program_option ("debug-lexer");
+ parser_->set_yydebug (get_program_option ("debug-parser"));
+
+
new_input (main_input_name_, sources_);
/* Do not allow \include in --safe-mode */
Lily_lexer *lexer = (Lily_lexer *) SCM_CELL_WORD_1 (s);
scm_gc_mark (lexer->chordmodifier_tab_);
+ if (lexer->parser_)
+ scm_gc_mark (lexer->parser_->self_scm ());
scm_gc_mark (lexer->pitchname_tab_stack_);
scm_gc_mark (lexer->start_module_);
return lexer->scopes_;
smobify_self ();
- lexer_ = new Lily_lexer (sources_);
+ lexer_ = new Lily_lexer (sources_, this);
lexer_->unprotect ();
}
lexer_->main_input_name_ = name;
message (_ ("Parsing..."));
- // progress_indication ("\n");
set_yydebug (0);
{
while (lexer_->has_scope ())
lexer_->remove_scope ();
-
-
}
+
lexer_ = 0;
}
(debug-gc-assert-parsed-dead #f
"for memory debugging: ensure that all refs to parsed objects are dead.")
+ (debug-midi #f "generate human readable MIDI")
+ (debug-parser #f "debug the bison parser")
+ (debug-lexer #f "debug the flex lexer")
(debug-midi #f "generate human readable MIDI")
(delete-intermediate-files #f
"delete unusable PostScript files")