From c436c3a6c66fa51ff52ac8740bcc82c58f4afa30 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Mon, 9 Apr 2012 07:45:20 -0400 Subject: [PATCH] Some new types, and lexer changes --- gmqcc | Bin 17230 -> 17486 bytes gmqcc.h | 33 ++++++++++++++++++++------------- lex.c | 11 ++++++++++- parse.c | 1 + 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/gmqcc b/gmqcc index 1c50928f3d25825755ac41cb5c218900a0f59668..f34c8a62d65e4d80880e4e4ec6ad0dde46d5cf60 100755 GIT binary patch delta 4251 zcmZ8k3s6+o89w(e)Mdrp<>@Y<+(mYQ732{Wl!uF<^#+YHjgIevn)n{Ix;~ORv)Bd0 zLNwIViPmW+)QqiTr!%BmBSE{nzAbGGI@1{@X_ctxUO_{38Zl9C|Nq>(>(w*E`S15Q z@AF^oUfIiCY2n)QxPo6f|5)rKti-F45P@M1>L0?^n2F9D6l;?61RJKfI%bavN zSD)Zu7P8CXVh_6<^f-4UdE3C#ssDbIRaJ2>@bU1PjLRGT)Yb2A;H|pi{08RJvzn0i zAtsPCa`_d$68J=7Bz5Ec$75%4o{0^t0ZuQTJtP=kBf+uTn&$7L`so{hrRMdcv7Yj;-V}e zE)8$c@S=tvt>No5{1^?tNW&YWJdEF<5lm5mkhL1#tl_t4_yi5VOT#B>_(lz%q~TkT zF8~6!Cs`x3YZ|0z_(SkxM`ycIE?zSP0+dc=6@QoHN{#=a5>JZ`Cx8I~Z%bx2zn z{wZQOULrLxT#Fb_RjOlnCSp8I$;I$=#CVEQ5yK^jF&`v>VJBidP08$GL>3Zwj1plu z4Y3LF@N*#SiHPykq<)4Ci1D^X3A9SL3kQ1l%ZOdM5%B&%95kj2ki#-Y^Ir#!JwZ$I9Ce!-1-nlDb9&oc?xX%tuW!sKgO-cAyHuP0Z^K$@C1@YJ8W)UzLKqW7He zIrL0|1uz-Wcm2^HOb5@H4xB9xm0dM8-Qo!8#yc4(V)Bh}-a}dTo$UgiG+#3{okat- z4@^-Fdc}Yj9}T}p176}lnQFNEU)F<;?i)MG(-@VjRQaMJV`5+lAQ)V!g71 zTUGI>B4Vn7I8$l4OBGub5z`h#yCQm2aRZ3n5zZR&_J0uT#q}#UeChJ)W#>$pzWj11O!7b1*yc+a2cXmv0FYE%mCUzj6 zoEAaU1+RSjPb!^it;Al8sGEa=L)Q1@Vj7-0t=U7Lt=-9u}pao{8~{`8N3r5 zQs5|n@cw$HpeOg)Z1h1R3|Sl!_iYg7>|3P|e*=6_#NJNA6YWgT;1<#^(#O;6^twrh zo~TQ67q`7-X}-40SqY~{w%@`RV01b~DSMYd@04IA_JS49AuBI*Kgy4YfZHvF)f*9z6DYPXwBL{o6Y><|WpW}IO z5BhGKQm-@&&r@I>!hNT+3H%QTmosim1#n6(ad-edxS(MsRoXxbH{tW1^L+v#zP_c) z&xvi7ali-K!3g8oLH2$rhyM(*JzD6q@g|PYF_~#418|$XBZ50+aDn=Ah9&nh(y+a} zZMLQP@9z$IM{?aKyFY>r4>UOF;>`K_U&IMy&OW=Fp2*DSH-zb}%ynb>^)P+!i0rnW zf{)b2LN@>5J-m76zj zBs(^*dz)-?Z(X-(4OzW$^9ncF@y;su=B?zNP40E>cj@k|PpEA|nt%F)>l_vALfV(G z8(6NZaY&6%?R1HKqUWY8cY<1WTb73*TJFelA7Y3CY`YkiB3QTi3$vD}tzp1gnF{9ip+0eC{SK zapYJBWErxUkQ$?Tfl*KL;c*%Kxo**|jzVsL9&wa%cj#B}e3u$>ayW^WTAHC0hXuW@1O~}nVgFj=g#AL>7Lv|u84jLOeejXn-gn+HSzQ+mqg8Z zb^Ib5U76?MCeoXEGW}+167A<={3FgovHY=AdZ1{MVUf)R-4X)Eo}#GLZ)%Cs1ClNF3Uy3f72rQq_Sq1jSo|B*Jp8H@Y%aRA)K0gQ#L%I#3s&{`Bfk`#Fggbt>vGVZ zX@x6Z>0~ZbVOw6|7qU4gk@#2m^~?|3re281j2eN*pSWflT{3-EWZ`;M{s*W6!A+*! z)1%uGY5T3(c1s%N%YRZ*H{Qh*FVI*rAoUZVai_YQF$zr_z$X$D=E8gBJ2@wPSY8PC zEvuqFGQ4UePgoClx9H)DNj!Xb_f*t_)me!Rmaw|DazEEktyMb!gaL7B a!zl{Sk{`5b$g|Y#t%~FF{a;nNWBw121iYdE delta 4025 zcmZu!4Nz3q6~6B+TbBiQ7Z9>bmh2N*U>6aVXaEISEY&AcLKAJQM4{1XteIA{I1)`~ zF$;!;;81THoJ=}p>|g4%88X{c#gtutP)j-%>9nCXjnqH(1yrJrC2D*<=f1c2LULz# z=YHRJ&b{Z}d+y`yxi;?HUarf<&Hst}w;mT^Enc;R2n=)Z{2KgORNmsMXS~Hlc`hqK zWs6j{$VC@(bqP-9LYkaj)@gFmL)^hR$6o6G{eq+Xp7ZGjQ8Xo6}wtNk5AjB8t zNs&f~on{H~YIviD7d3pGhOg1^vo-u$4R4y}Vg7oJV4fBT*{tC$8ooipCusO44WFpt zn>BorhHpbY7YN**IU1o$6OgRo59H9)Sf}sv6hcJ*DZ|OABrn=OS0J+Ur|>j8ywF3u z8D(iyhURQXjAbDWG5jiGEC(sf@Gity1yV1=+Y#gGOFay4L5!y^b;&+poG&1O$1OE8 zhjoZ?9a00s&mcA+u4lLsF`lYa!|*c1c$$)z;l+sY6s3HI3lQUdkOYR^i19Qfi;ofM zNZ>I_gyB@gczV+0Lm-@qi1E~Z5NdjjAj#JvpPLX3wZ^#ES; zthi_503g52)Ax-f31o54v2pW_&p|?B;9?|{M9boy&ixpiLVPnp z&taH*{5{Y0m4Wjc#K0xde`T^}^~y8heDD#^9Pe?^V{talLH`k#RqYT6*|F+aHoT9- z4*eiNanHDb==gn|=pX0A;*lR^e9!EtAW#TlP7LUO4Nmf$0p`@9@5Yegk?ogG>-`Q| z8J}vk!;ovlz}3dYBd`i0wuT!G>qGf2`bzv0{M$nCt@tsHBf%C^wLZx@&rAA?(jj*l zZigo<1!99&lV0Tb-RZPC`A_aPC>;M(p1EZ!>!h1omP6+otyd}nqvm}^=$HE+)R|iv zc)B3P&R^naRf>(j$k7*5-0A;@DlC2IAY`XW+&BcuSF~+P5&~bJQz`>#Zt-(8m{RL| z2i!#eN#UptvJHI`k`V(R-~Nrc`?z`k2~W7_yt(B*D1BIy{WVO!7;)W_<-my}5K3By z%`F$u0pt7Es163j0WxF`N6`U`xPPtcF!m`MK}S0uo8`mvR^$z;d|Hw5Vzdr7?(V|^ z@86_~zf(la2*eG2cpLhEpo*_6B2ETkxsrFIDsELo3;;2s56AC+*{7<{fa;&(Y+?Us ztKJV1JNMf4<L60ET+eF->ud5B)+>asgKa9)@}q_ymJ@ zL&p_puEoG947_>+9dCq&73D62*Fu*SI0g{JI|}+2AjrlL(nF*tEOx#mRCR7NM2-U= z@@Bwj-O!_5b~|5qlfGk5qcQfH1x@$VwKaM=p0&0PH@Qpk5O-Y0_eKgEDG~#5xDQqL z=&N=&-*5w>U*jj|1`E^LxmovT3uH<106qIeTJDF?7XxGB0deEqijJ7~1SjloNBn>n zY=1B0&@rbKIe6ogOwdF}mG9g*jNP%QObLwSDKH;l=ldB1UXhW<88_PwoKkxnBp5n@ zD;i=_DF;$y6ZZF<8W9KyjMT0_DRz`f@dD{@14o!o53>Jna-oRkEmu0yZ z)S|1hJPFo1Cd(s;!3waaq9n^}!JY-%1~vja)eE)_jz0qS2$ZE2UQXGQvg`%h1hyXR z+S{+ z_v^M8O$HJEMdL_+g={U5^+%8mS!S}l&X=34dv)a|!5^b5<&7q5xyiE3WT*gtJGeXm z|1eE(Ikh7@Gtyj0!s>&_T~r2|X(85g1E8qzMK2v2YEr!H0WgL1ApBf-IS| z9T5C8#RkPQ_y`FuYJ759gMW^dj}ZJQXa}TzWskV&;3G8ZrpASZu{p|^Jvp@U5&B~e zZC_Z%<ohC7oAxoC>E4mM$&Y z?U^xP35>vfMFN$K#{}pnMR_)L^Po;xdxfc~WF&_c6tAe9G3GCsnn(;TFY}H*-evrk z7xic0dHBuc6}+^z$VnTXjG+_712(lntZKX)X6In5wm@m+EOIAb|j-L|PJ^)o9u&+6^Z^`twC>kL*)z~f@n1ox`Di60W!GJ#JdX1p%DN_KKCdaEQ4N;18)E;_y9N62Sv1S~)L zX6XVRK1&Bn>%i5$6a&_=XZzB9@NTq~?aUprdRbsd4bOuKacPsu3eR2-pcNy}F85Gb MESD3!P}Ugpf8sS(H~;_u diff --git a/gmqcc.h b/gmqcc.h index 162eed4..091725b 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -20,8 +20,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef DPQCC_HDR -#define DPQCC_HDR +#ifndef GMQCC_HDR +#define GMQCC_HDR #include /* The types supported by the language */ @@ -155,23 +155,30 @@ struct lex_file { #define TOKEN_CONTINUE 5 #define TOKEN_RETURN 6 #define TOKEN_GOTO 7 -#define TOKEN_FOR 8 +#define TOKEN_FOR 8 // extension +#define TOKEN_INT 9 // extension +#define TOKEN_BOOL 10 // extension +#define TOKEN_VOID 11 +#define TOKEN_STRING 12 +#define TOKEN_FLOAT 13 +#define TOKEN_VECTOR 14 +#define TOKEN_ENTITY 15 /* * Lexer state constants, these are numbers for where exactly in * the lexing the lexer is at. Or where it decided to stop if a lexer * error occurs. */ -#define LEX_COMMENT 128 /* higher than ascii */ -#define LEX_CHRLIT 129 -#define LEX_STRLIT 130 -#define LEX_IDENT 131 -#define LEX_DO 132 -#define LEX_ELSE 133 -#define LEX_IF 134 -#define LEX_WHILE 135 -#define LEX_INCLUDE 136 -#define LEX_DEFINE 137 +#define LEX_COMMENT 128 /* higher than ascii */ +#define LEX_CHRLIT 129 +#define LEX_STRLIT 130 +#define LEX_IDENT 131 +#define LEX_DO 132 +#define LEX_ELSE 133 +#define LEX_IF 134 +#define LEX_WHILE 135 +#define LEX_INCLUDE 136 +#define LEX_DEFINE 137 int lex_token(struct lex_file *); void lex_reset(struct lex_file *); diff --git a/lex.c b/lex.c index 1cb8d0c..e94252d 100644 --- a/lex.c +++ b/lex.c @@ -30,7 +30,16 @@ static const char *const lex_keywords[] = { "do", "else", "if", "while", "break", "continue", "return", "goto", - "for" + "for", + + /* types */ + "int", + "bool", + "void", + "string", + "float", + "vector", + "entity" }; struct lex_file *lex_open(const char *name) { diff --git a/parse.c b/parse.c index a43981f..7743360 100644 --- a/parse.c +++ b/parse.c @@ -22,6 +22,7 @@ */ #include #include "gmqcc.h" + int parse(struct lex_file *file) { int token = 0; while ((token = lex_token(file)) != ERROR_LEX && file->length >= 0) { -- 2.39.2