]> Nishi Git Mirror - dataworks.git/commitdiff
use floating not double
authornishi <nishi@d4a5a174-5a4a-5b4b-b672-37683c10d7d5>
Tue, 4 Jun 2024 03:29:52 +0000 (03:29 +0000)
committernishi <nishi@d4a5a174-5a4a-5b4b-b672-37683c10d7d5>
Tue, 4 Jun 2024 03:29:52 +0000 (03:29 +0000)
git-svn-id: file:///raid/svn-main/nishi-dataworks/trunk@143 d4a5a174-5a4a-5b4b-b672-37683c10d7d5

Grammar/dw.y
Library/parser.c
common-decl.mk
common.mk

index 16785fe08e344ee594f8323a8a33b3d963ab27e9..b68dd1e2f8c83f0ce6dfaf520c4cfbe7b44ed7b4 100644 (file)
@@ -38,7 +38,7 @@
        struct Node {
                char* string;
                char* ident;
-               struct Node* nodes;
+               struct Node** nodes;
        } node;
 }
 
@@ -66,18 +66,31 @@ single_argument
        ;
 
 arguments
-       : single_argument
-       | arguments ',' single_argument
+       : single_argument {
+               $<node>$.nodes = malloc(sizeof(*$<node>$.nodes) * 2);
+               $<node>$.nodes[0] = &$<node>1;
+               $<node>$.nodes[1] = NULL;
+       }
+       | arguments ',' single_argument {
+               struct Node** old_nodes = $<node>$.nodes;
+               int i;
+               for(i = 0; old_nodes[i] != NULL; i++);
+               $<node>$.nodes = malloc(sizeof(*$<node>$.nodes) * (i + 2));
+               for(i = 0; old_nodes[i] != NULL; i++) $<node>$.nodes[i] = old_nodes[i];
+               $<node>$.nodes[i] = &$<node>3;
+               $<node>$.nodes[i + 1] = NULL;
+               free(old_nodes);
+       }
        | SPACE
        | ;
        ;
 
 command
        : IDENTIFIER SPACE '(' arguments ')' {
-               printf("%s\n", $<node>1.ident);
+               printf("%s %p\n", $<node>1.ident, $<node>1.nodes);
        }
        | IDENTIFIER '(' arguments ')' {
-               printf("%s\n", $<node>1.ident);
+               printf("%s %p\n", $<node>1.ident, $<node>1.nodes);
        }
        ;
 
index 20d7701e176e1320b3a13ad14defdcc1b3ff0738..99f6f70ce90068e39271e0df07dc3aa595a07c86 100644 (file)
@@ -42,6 +42,10 @@ extern void* yy_scan_string(const char* str);
 extern void yy_delete_buffer(void* buffer);
 
 int __dw_parser_parse(const char* str, bool top) {
+#ifdef PARSER_DEBUG
+       yydebug = 1;
+#endif
+
        void* buf = yy_scan_string(str);
        if(yyparse() != 0){
                yy_delete_buffer(buf);
index 723aa2b682839e443afb1697f094e34d60427f33..73166ebd9be58c01d8292def7f62a911ebd7f67e 100644 (file)
@@ -8,7 +8,7 @@ LEX = lex
 AR_ARGS = rcs \$$@
 RANLIB = ranlib
 WINDRES = windres
-CFLAGS = -g -std=c99 -D_DEFAULT_SOURCE
+CFLAGS = -g -std=c99 -D_DEFAULT_SOURCE $(DEBUGFLAGS)
 LDFLAGS = -L`pwd`/Library
 YFLAGS = -d -t
 LFLAGS =
index fd0c45c56a2f4b315cc77b797595a2c315e60115..93bb05ebae00001bd96e3402537c3e6ff5261c2d 100644 (file)
--- a/common.mk
+++ b/common.mk
@@ -72,7 +72,7 @@ archive:
        $(MAKE) archive-cleanup
 
 prepare-dosbox: no-doc
-       echo 'create_table("test", "string:key", "double:value");' > op.txt
+       echo 'create_table("test", "string:key", "floating:value");' > op.txt
        echo '.tables' >> op.txt
        echo "[cpu]" > dosbox.conf
        echo "cycles=12000" >> dosbox.conf