# Copyright 2003 Vladimir Prus 
# Distributed under the Boost Software License, Version 1.0. 
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) 

import type ;
import generators ;
import feature ;
import property ;


feature.feature flex.prefix : : free ;
type.register LEX : l ;
type.register LEX++ : ll ;
generators.register-standard lex.lex : LEX : C ;
generators.register-standard lex.lex : LEX++ : CPP ;

rule init ( )
{
}

rule lex ( target : source : properties * )
{   
    local r = [ property.select flex.prefix : $(properties) ] ;
    if $(r)
    {
        PREFIX on $(<) = $(r:G=) ;
    }
}

actions lex 
{
    flex -P$(PREFIX) -o$(<) $(>)    
}
