1 ;;; make.by -- BY notation for Makefiles.
3 ;; Copyright (C) 1999-2018 Free Software Foundation, Inc.
5 ;; Author: Eric M. Ludlam <zappo@gnu.org>
6 ;; David Ponce <david@dponce.com>
7 ;; Klaus Berndl <klaus.berndl@sdm.de>
9 ;; This file is part of GNU Emacs.
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation, either version 3 of the License, or
14 ;; (at your option) any later version.
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;; GNU General Public License for more details.
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
24 %package semantic-make-by
25 %provide semantic/bovine/make-by
27 %languagemode makefile-mode
30 ;; This was always a test case.
35 %token IFNDEF "ifndef"
40 %token INCLUDE "include"
42 %put { IF ELSE ENDIF } summary "Conditional: if (expression) ... else ... endif"
43 %put IFDEF summary "Conditional: ifdef (expression) ... else ... endif"
44 %put IFNDEF summary "Conditional: ifndef (expression) ... else ... endif"
45 %put IFEQ summary "Conditional: ifeq (expression) ... else ... endif"
46 %put IFNEQ summary "Conditional: ifneq (expression) ... else ... endif"
47 %put INCLUDE summary "Macro: include filename1 filename2 ..."
49 %token <punctuation> COLON "\\`[:]\\'"
50 %token <punctuation> PLUS "\\`[+]\\'"
51 %token <punctuation> EQUAL "\\`[=]\\'"
52 %token <punctuation> DOLLAR "\\`[$]\\'"
53 %token <punctuation> BACKSLASH "\\`[\\]\\'"
57 ;; Escape the ,@ below because the reader doesn't correctly detect
58 ;; old-style backquotes for this case. The backslashes can be removed
59 ;; once old-style backquotes are completely gone (probably in
62 Makefile : bol newline (nil)
75 variable: symbol opt-whitespace equals opt-whitespace element-list
76 (VARIABLE-TAG ,$1 nil ,$5)
79 rule: targets opt-whitespace colons opt-whitespace element-list commands
80 (FUNCTION-TAG ,$1 nil ,$5)
83 targets: target opt-whitespace targets
84 ( (car ,$1) (car ,@$3) )
89 target: sub-target target
90 ( (concat (car ,$1) (car ,@$3) ) )
100 conditional: IF some-whitespace symbol newline
102 | IFDEF some-whitespace symbol newline
104 | IFNDEF some-whitespace symbol newline
106 | IFEQ some-whitespace expression newline
108 | IFNEQ some-whitespace expression newline
116 expression : semantic-list
119 include: INCLUDE some-whitespace element-list
120 (INCLUDE-TAG ,$3 nil)
123 equals: COLON EQUAL ()
128 colons: COLON COLON ()
132 element-list: elements newline
136 elements: element some-whitespace elements
143 element: sub-element element
144 ( (concat (car ,$1) (car ,$2)) )
152 ( (buffer-substring-no-properties
153 (identity start) (identity end)) )
156 varref: DOLLAR semantic-list
157 ( (buffer-substring-no-properties (identity start) (identity end)) )
160 commands: bol shell-command newline commands
166 opt-whitespace : some-whitespace ( nil )
170 some-whitespace : whitespace some-whitespace (nil)
174 ;;; make.by ends here