File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / conf / gen_parser.m4
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Aug 22 12:33:54 2017 UTC (6 years, 11 months ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_8p3, v1_6_3p0, v1_6_3, HEAD
bird 1.6.3

    1: m4_divert(-1)m4_dnl
    2: #
    3: #	BIRD -- Generator of Configuration Grammar
    4: #
    5: #	(c) 1998--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
    6: #
    7: #	Can be freely distributed and used under the terms of the GNU GPL.
    8: #
    9: 
   10: # Diversions used:
   11: #	1	includes
   12: #	2	types etc.
   13: #	3	rules
   14: #	4	C code
   15: 
   16: # Common aliases
   17: m4_define(DNL, `m4_dnl')
   18: 
   19: # Define macros for defining sections
   20: m4_define(CF_ZONE, `m4_divert($1)/* $2 from m4___file__ */')
   21: m4_define(CF_HDR, `CF_ZONE(1, Headers)')
   22: m4_define(CF_DEFINES, `CF_ZONE(1, Defines)')
   23: m4_define(CF_DECLS, `CF_ZONE(2, Declarations)')
   24: m4_define(CF_GRAMMAR, `CF_ZONE(3, Grammar)')
   25: m4_define(CF_CODE, `CF_ZONE(4, C Code)')
   26: m4_define(CF_END, `m4_divert(-1)')
   27: 
   28: # Simple iterator
   29: m4_define(CF_itera, `m4_ifelse($#, 1, [[CF_iter($1)]], [[CF_iter($1)[[]]CF_itera(m4_shift($@))]])')
   30: m4_define(CF_iterate, `m4_define([[CF_iter]], m4_defn([[$1]]))CF_itera($2)')
   31: 
   32: # Keywords act as untyped %token
   33: m4_define(CF_keywd, `m4_ifdef([[CF_tok_$1]],,[[m4_define([[CF_tok_$1]],1)m4_define([[CF_toks]],CF_toks $1)]])')
   34: m4_define(CF_KEYWORDS, `m4_define([[CF_toks]],[[]])CF_iterate([[CF_keywd]], [[$@]])m4_ifelse(CF_toks,,,%token[[]]CF_toks
   35: )DNL')
   36: 
   37: # Dynamic syntax rules
   38: m4_define(CF_dyn_rules,)
   39: m4_define(CF_ADDTO, `m4_define([[CF_rule_$1]],m4_ifdef([[CF_rule_$1]],CF_rule_$1 | ,[[m4_define([[CF_dyn_rules]],CF_dyn_rules[[CF_RULE($1)
   40: ]])]])$2)DNL')
   41: 
   42: # CLI commands
   43: m4_define(CF_CLI, `m4_define([[CF_cmd]], cmd_[[]]m4_translit($1, [[ ]], _))DNL
   44: m4_divert(2)CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
   45: m4_divert(3)CF_ADDTO(cli_cmd, CF_cmd)
   46: CF_cmd: $1 $2 END')
   47: m4_define(CF_CLI_CMD, `')
   48: m4_define(CF_CLI_HELP, `')
   49: 
   50: # ENUM declarations are ignored
   51: m4_define(CF_ENUM, `')
   52: 
   53: # After all configuration templates end, we finally generate the grammar file.
   54: m4_m4wrap(`
   55: m4_divert(0)DNL
   56: %{
   57: m4_undivert(1)DNL
   58: %}
   59: 
   60: m4_undivert(2)DNL
   61: 
   62: %%
   63: m4_undivert(3)DNL
   64: 
   65: /* Dynamic rules */
   66: 
   67: m4_define(CF_RULE, [[$1: CF_rule_$1 ;]])
   68: CF_dyn_rules
   69: %%
   70: m4_undivert(4)DNL
   71: ')
   72: 
   73: # As we are processing C source, we must access all M4 primitives via
   74: # m4_* and also set different quoting convention: `[[' and ']]'
   75: m4_changequote([[,]])

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>