-- Copyright 2006-2015 Mitchell mitchell.att.foicica.com. See LICENSE. -- Makefile LPeg lexer. local l = require('lexer') local token, word_match = l.token, l.word_match local P, R, S = lpeg.P, lpeg.R, lpeg.S local M = {_NAME = 'makefile'} -- Whitespace. local ws = token(l.WHITESPACE, l.space^1) -- Comments. local comment = token(l.COMMENT, '#' * l.nonnewline^0) -- Keywords. local keyword = token(l.KEYWORD, P('!')^-1 * l.word_match({ -- GNU Make conditionals. 'ifeq', 'ifneq', 'ifdef', 'ifndef', 'else', 'endif', -- Other conditionals. 'if', 'elseif', 'elseifdef', 'elseifndef', -- Directives and other keywords. 'define', 'endef', 'export', 'include', 'override', 'private', 'undefine', 'unexport', 'vpath' }, nil, true)) -- Functions. local func = token(l.FUNCTION, l.word_match({ -- Functions for String Substitution and Analysis. 'subst', 'patsubst', 'strip', 'findstring', 'filter', 'filter-out', 'sort', 'word', 'wordlist', 'words', 'firstword', 'lastword', -- Functions for File Names. 'dir', 'notdir', 'suffix', 'basename', 'addsuffix', 'addprefix', 'join', 'wildcard', 'realpath', 'abspath', -- Functions for Conditionals. 'if', 'or', 'and', -- Miscellaneous Functions. 'foreach', 'call', 'value', 'eval', 'origin', 'flavor', 'shell', -- Functions That Control Make. 'error', 'warning', 'info' }), '-') -- Variables. local word_char, assign = l.any - l.space - S(':#=(){}'), S(':+?')^-1 * '=' local expanded_var = '$' * ('(' * word_char^1 * ')' + '{' * word_char^1 * '}') local auto_var = '$' * S('@%