1 /*
2 * Copyright (c) 2016, Ori Bernstein
3 *
4 * This source code is released for free distribution under the terms of the
5 * GNU General Public License version 2 or (at your option) any later version.
6 *
7 * This module contains functions for generating tags for Myrddin language
8 * files. (https://myrlang.org)
9 */
10
11 /*
12 * INCLUDE FILES
13 */
14 #include "general.h" /* must always come first */
15 #include "parse.h"
16
17 static tagRegexTable myrddinTagRegexTable [] = {
18 /* const foo = {; function literal } */
19 {"^([ \t]*extern)?[ \t]*const[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=[ \t]\\{",
20 "\\2", "f,function,functions", NULL},
21 /* const foo = initializer */
22 {"^([ \t]*extern)?[ \t]*const[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*(=[ \t][^{].*)?$",
23 "\\2", "c,constant,constants", NULL},
24 /* var foo = initializer */
25 {"^([ \t]*extern)?[ \t]*var[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)",
26 "\\2", "v,var,variables", NULL},
27 /* type foo = name */
28 {"^[ \t]*type[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=",
29 "\\1", "t,type,types", NULL},
30 /* trait foo = trait-defn ;; */
31 {"^[ \t]*trait[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)[ \t]*=",
32 "\\1", "r,trait,traits", NULL},
33 /* pkg foo = declarations ;; */
34 {"^[ \t]*pkg[ \t]+([a-zA-Z_][a-zA-Z0-9_]*)",
35 "\\1", "p,pkg,packages", NULL},
36 };
37
38 /*
39 * FUNCTION DEFINITIONS
40 */
41
MyrddinParser(void)42 extern parserDefinition *MyrddinParser (void)
43 {
44 static const char *const extensions [] = { "myr", NULL };
45 parserDefinition* const def = parserNew ("Myrddin");
46 def->extensions = extensions;
47 def->tagRegexTable = myrddinTagRegexTable;
48 def->tagRegexCount = ARRAY_SIZE (myrddinTagRegexTable);
49 def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
50 return def;
51 }
52