Initial upload

This commit is contained in:
ryanfleury
2021-01-20 11:19:34 -07:00
commit 90fc1de709
30 changed files with 5769 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
@struct foo : {
x : ([MAX_PATH]char),
}
@struct @test_tag bar : {
y : float,
z: i32,
}
+20
View File
@@ -0,0 +1,20 @@
@sets a_set : {
named_set : {1, 3, 7},
{not, named, set},
@tag_with_params(p1, p2, p3) { e1, e2, e3 },
@tag_with_params(p1, p2, p3) @tag2_with_params(p, pp, ppp) { e1, e2, e3 },
}
@empty_set empty : {
}
@tagged_unnamed_set {
a_label: {unnamed_set_element}
}
@showcase_mixed_set_scoping {
@symbol_label
+: (1 2 3],
@symbol_label
*: [x y z),
}
@@ -0,0 +1,73 @@
Node {
Kind: Label,
Flags: 00001100000100000000000000000000,
Flag Names: BraceLeft, BraceRight, Identifier,
String: foo,
Whole String: foo,
Tag: @struct
Node {
Kind: Label,
Flags: 11000001000100000000000000000000,
Flag Names: ParenLeft, ParenRight, BeforeComma, Identifier,
String: x,
Whole String: x,
Node {
Kind: UnnamedSet,
Flags: 00110000000000000000000000000000,
Flag Names: BracketLeft, BracketRight,
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: MAX_PATH,
Whole String: MAX_PATH,
}
}
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: char,
Whole String: char,
}
}
}
Node {
Kind: Label,
Flags: 00001100000100000000000000000000,
Flag Names: BraceLeft, BraceRight, Identifier,
String: bar,
Whole String: bar,
Tag: @struct
Tag: @test_tag
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: y,
Whole String: y,
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: float,
Whole String: float,
}
}
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: z,
Whole String: z,
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: i32,
Whole String: i32,
}
}
}
@@ -0,0 +1,282 @@
Node {
Kind: Label,
Flags: 00001100000100000000000000000000,
Flag Names: BraceLeft, BraceRight, Identifier,
String: a_set,
Whole String: a_set,
Tag: @sets
Node {
Kind: Label,
Flags: 00001101000100000000000000000000,
Flag Names: BraceLeft, BraceRight, BeforeComma, Identifier,
String: named_set,
Whole String: named_set,
Node {
Kind: Label,
Flags: 00000001001000000000000000000000,
Flag Names: BeforeComma, Numeric,
String: 1,
Whole String: 1,
}
Node {
Kind: Label,
Flags: 00000001011000000000000000000000,
Flag Names: BeforeComma, AfterComma, Numeric,
String: 3,
Whole String: 3,
}
Node {
Kind: Label,
Flags: 00000000011000000000000000000000,
Flag Names: AfterComma, Numeric,
String: 7,
Whole String: 7,
}
}
Node {
Kind: UnnamedSet,
Flags: 00001101010000000000000000000000,
Flag Names: BraceLeft, BraceRight, BeforeComma, AfterComma,
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: not,
Whole String: not,
}
Node {
Kind: Label,
Flags: 00000001010100000000000000000000,
Flag Names: BeforeComma, AfterComma, Identifier,
String: named,
Whole String: named,
}
Node {
Kind: Label,
Flags: 00000000010100000000000000000000,
Flag Names: AfterComma, Identifier,
String: set,
Whole String: set,
}
}
Node {
Kind: UnnamedSet,
Flags: 00001101010000000000000000000000,
Flag Names: BraceLeft, BraceRight, BeforeComma, AfterComma,
Tag: @tag_with_params
Tag Children{
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: p1,
Whole String: p1,
}
Node {
Kind: Label,
Flags: 00000001010100000000000000000000,
Flag Names: BeforeComma, AfterComma, Identifier,
String: p2,
Whole String: p2,
}
Node {
Kind: Label,
Flags: 00000000010100000000000000000000,
Flag Names: AfterComma, Identifier,
String: p3,
Whole String: p3,
}
}
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: e1,
Whole String: e1,
}
Node {
Kind: Label,
Flags: 00000001010100000000000000000000,
Flag Names: BeforeComma, AfterComma, Identifier,
String: e2,
Whole String: e2,
}
Node {
Kind: Label,
Flags: 00000000010100000000000000000000,
Flag Names: AfterComma, Identifier,
String: e3,
Whole String: e3,
}
}
Node {
Kind: UnnamedSet,
Flags: 00001101010000000000000000000000,
Flag Names: BraceLeft, BraceRight, BeforeComma, AfterComma,
Tag: @tag_with_params
Tag Children{
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: p1,
Whole String: p1,
}
Node {
Kind: Label,
Flags: 00000001010100000000000000000000,
Flag Names: BeforeComma, AfterComma, Identifier,
String: p2,
Whole String: p2,
}
Node {
Kind: Label,
Flags: 00000000010100000000000000000000,
Flag Names: AfterComma, Identifier,
String: p3,
Whole String: p3,
}
}
Tag: @tag2_with_params
Tag Children{
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: p,
Whole String: p,
}
Node {
Kind: Label,
Flags: 00000001010100000000000000000000,
Flag Names: BeforeComma, AfterComma, Identifier,
String: pp,
Whole String: pp,
}
Node {
Kind: Label,
Flags: 00000000010100000000000000000000,
Flag Names: AfterComma, Identifier,
String: ppp,
Whole String: ppp,
}
}
Node {
Kind: Label,
Flags: 00000001000100000000000000000000,
Flag Names: BeforeComma, Identifier,
String: e1,
Whole String: e1,
}
Node {
Kind: Label,
Flags: 00000001010100000000000000000000,
Flag Names: BeforeComma, AfterComma, Identifier,
String: e2,
Whole String: e2,
}
Node {
Kind: Label,
Flags: 00000000010100000000000000000000,
Flag Names: AfterComma, Identifier,
String: e3,
Whole String: e3,
}
}
}
Node {
Kind: Label,
Flags: 00001100000100000000000000000000,
Flag Names: BraceLeft, BraceRight, Identifier,
String: empty,
Whole String: empty,
Tag: @empty_set
}
Node {
Kind: UnnamedSet,
Flags: 00001100000000000000000000000000,
Flag Names: BraceLeft, BraceRight,
Tag: @tagged_unnamed_set
Node {
Kind: Label,
Flags: 00001100000100000000000000000000,
Flag Names: BraceLeft, BraceRight, Identifier,
String: a_label,
Whole String: a_label,
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: unnamed_set_element,
Whole String: unnamed_set_element,
}
}
}
Node {
Kind: UnnamedSet,
Flags: 00001100000000000000000000000000,
Flag Names: BraceLeft, BraceRight,
Tag: @showcase_mixed_set_scoping
Node {
Kind: Label,
Flags: 10010001000000000000000000000000,
Flag Names: ParenLeft, BracketRight, BeforeComma,
String: +,
Whole String: +,
Tag: @symbol_label
Node {
Kind: Label,
Flags: 00000000001000000000000000000000,
Flag Names: Numeric,
String: 1,
Whole String: 1,
}
Node {
Kind: Label,
Flags: 00000000001000000000000000000000,
Flag Names: Numeric,
String: 2,
Whole String: 2,
}
Node {
Kind: Label,
Flags: 00000000001000000000000000000000,
Flag Names: Numeric,
String: 3,
Whole String: 3,
}
}
Node {
Kind: Label,
Flags: 01100001010000000000000000000000,
Flag Names: ParenRight, BracketLeft, BeforeComma, AfterComma,
String: *,
Whole String: *,
Tag: @symbol_label
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: x,
Whole String: x,
}
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: y,
Whole String: y,
}
Node {
Kind: Label,
Flags: 00000000000100000000000000000000,
Flag Names: Identifier,
String: z,
Whole String: z,
}
}
}
+86
View File
@@ -0,0 +1,86 @@
// Sample code to print out the data from MD_ParseWholeFile
#include "md.h"
#include "md.c"
#define INDENT_SPACES 2
static void Print(FILE* file, int indent_count, char* fmt, ...) {
for(int i = 0; i < indent_count*INDENT_SPACES; i += 1)
{
fprintf(file, " ");
}
va_list args;
va_start(args, fmt);
vfprintf(file, fmt, args);
va_end(args);
}
static void PrintNode(MD_Node* node, FILE* file, int indent_count) {
Print(file, indent_count, "Node {\n");
Print(file, indent_count+1, "Kind: %.*s,\n", MD_StringExpand(MD_StringFromNodeKind(node->kind)));
int flags_bits = sizeof(node->flags)*8;
char binary_flags[sizeof(node->flags)*8+1];
binary_flags[flags_bits] = '\0';
int flag_index = 0;
MD_NodeFlags flags = node->flags;
for (int i = 0; i < flags_bits; i++) {
binary_flags[i] = (flags&1) ? '1' : '0';
flag_index++;
flags >>= 1;
}
Print(file, indent_count+1, "Flags: %s,\n", binary_flags);
Print(file, indent_count+1, "Flag Names: ", binary_flags);
MD_String8List flags_list = MD_StringListFromNodeFlags(node->flags);
MD_String8 flag_names = MD_JoinStringListWithSeparator(flags_list, MD_S8CString(", "));
fprintf(file, "%.*s,\n", MD_StringExpand(flag_names));
if(node->string.size > 0) Print(file, indent_count+1, "String: %.*s,\n", MD_StringExpand(node->string));
if(node->whole_string.size > 0) Print(file, indent_count+1, "Whole String: %.*s,\n", MD_StringExpand(node->whole_string));
if (node->first_tag->kind != MD_NodeKind_Nil) {
for (MD_EachNode(tag, node->first_tag)) {
Print(file, indent_count+1, "Tag: @%.*s\n", MD_StringExpand(tag->string));
if (tag->first_child->kind != MD_NodeKind_Nil) {
Print(file, indent_count+2, "Tag Children{\n");
for (MD_EachNode(arg, tag->first_child)) {
PrintNode(arg, file, indent_count+3);
}
Print(file, indent_count+2, "}\n");
}
}
}
for(MD_EachNode(child, node->first_child)) {
PrintNode(child, file, indent_count+1);
}
Print(file, indent_count, "}\n");
}
int main(int argument_count, char **arguments)
{
// NOTE(pmh): Parse all the files passed in via command line.
MD_Node *first = MD_NilNode();
MD_Node *last = MD_NilNode();
for(int i = 1; i < argument_count; i += 1)
{
MD_Node *root = MD_ParseWholeFile(MD_S8CString(arguments[i]));
MD_PushSibling(&first, &last, MD_NilNode(), root);
}
for(MD_EachNode(root, first))
{
MD_String8 code_filename = MD_TrimExtension(MD_TrimFolder(root->filename));
MD_String8 info_filename = MD_PushStringF("parsed_%.*s.txt", MD_StringExpand(code_filename));
printf("Parse Input -> Output: %.*s -> %.*s\n", MD_StringExpand(code_filename), MD_StringExpand(info_filename));
FILE* file = fopen((char *)info_filename.str, "w");
for(MD_EachNode(node, root->first_child))
{
PrintNode(node, file, 0);
fprintf(file, "\n");
}
fclose(file);
}
return 0;
}