blob: 782199bd8eeb8d8c41c39895e3bd1307bb5656b3 [file] [log] [blame]
def genlex(name, src, out, includes = []):
"""Generate a C++ lexer from a lex file using Flex.
Args:
name: The name of the rule.
src: The .lex source file.
out: The generated source file.
includes: A list of headers included by the .lex file.
"""
cmd = "flex -o $(@D)/%s $(location %s)" % (out, src)
native.genrule(
name = name,
outs = [out],
srcs = [src] + includes,
cmd = cmd,
)
def genyacc(name, src, header_out, source_out, extra_outs = []):
"""Generate a C++ parser from a Yacc file using Bison.
Args:
name: The name of the rule.
src: The input grammar file.
header_out: The generated header file.
source_out: The generated source file.
extra_outs: Additional generated outputs.
"""
cmd = "$${BISON:-bison} -o $(@D)/%s $(location %s)" % (source_out, src)
native.genrule(
name = name,
outs = [source_out, header_out] + extra_outs,
srcs = [src],
cmd = cmd,
)