_baseclassheader:
    BASECLASSHEADER
    {
        d_expect = "scanner base class header file name";
    }
;

_classheader:
    CLASSHEADER
    {
        d_expect = "scanner class header file name";
    }
;

_classname:
    CLASSNAME
    {
        d_expect = "class name";
    }
;

_filenames:
    FILENAMES
    {
        d_expect = "generic filenames specification";
    }
;

_implementationheader:
    IMPLEMENTATIONHEADER
    {
        d_expect = "implementation header file name";
    }
;

_inputinterface:
    INPUTINTERFACE
    {
        d_expect = "name of the file holding Input's interface";
    }
;

_inputimplementation:
    INPUTIMPLEMENTATION
    {
        d_expect = "name of the file holding Input's implementations";
    }
;

_lexfunctionname:
    LEXFUNCTIONNAME
    {
        d_expect = "name of the lex() function";
    }
;

_lexsource:
    LEXSOURCE
    {
        d_expect = "source file name of the lex function";
    }
;

_namespace:
    NAMESPACE
    {
        d_expect = "name of the namespace to use";
    }
;

_skeleton_directory:
    SKELETON_DIRECTORY
    {
        d_expect = "directory name of the flexc++ skeleton files";
    }
;

_target_directory:
    TARGET_DIRECTORY
    {
        d_expect = "target directory name for generated files";
    }
;

_stringOrIdent:
    STRING
|
    IDENTIFIER
;

_opt_is:
    // empty
|
    '='
;

option:
    _inputinterface _opt_is _stringOrIdent
    {
        d_options.setInputInterfacePath();
    }
|
    _inputimplementation _opt_is _stringOrIdent
    {
        d_options.setInputImplementationPath();
    }
|
    _classname _opt_is _stringOrIdent
    {
        d_options.setClassName();
    }
|
    _filenames _opt_is _stringOrIdent
    {
        d_options.setFilenames();
    }
|
    _lexfunctionname _opt_is _stringOrIdent
    {
        d_options.setLexFunctionName();
    }
|
    _baseclassheader _opt_is _stringOrIdent
    {
        d_options.setBaseClassHeader();
    }
|
    _classheader _opt_is _stringOrIdent
    {
        d_options.setClassHeader();
    }
|
    _implementationheader _opt_is _stringOrIdent
    {
        d_options.setImplementationHeader();
    }
|
    _lexsource _opt_is _stringOrIdent
    {
        d_options.setLexSource();
    }
|
    _skeleton_directory _opt_is _stringOrIdent
    {
        d_options.setSkeletonDirectory();
    }
|
    _target_directory _opt_is _stringOrIdent
    {
        d_options.setTargetDirectory();
    }
|
    _namespace _opt_is _stringOrIdent
    {
        d_options.setNameSpace();
    }
|
    CASEINSENSITIVE
    {
        d_options.setCaseInsensitive();
    }
|
    INTERACTIVE
    {
        d_options.setInteractive();
    }
|
    PRINT
    {
        d_options.setPrint();
    }
|
    NOLINES
    {
        d_options.setLines(false);
    }
|
    DEBUG
    {
        d_options.setDebug();
    }
;

