From 8ff9e5136a73469d9c182aaebf926e66167300ad Mon Sep 17 00:00:00 2001 From: Lerking <33354709+Lerking@users.noreply.github.com> Date: Tue, 17 Jul 2018 11:51:38 +0200 Subject: [PATCH] Added 'lexer' file test --- lexer/__pycache__/keywords.cpython-34.pyc | Bin 0 -> 2120 bytes lexer/__pycache__/tokens.cpython-34.pyc | Bin 0 -> 1138 bytes lexer/gtk.h | 293 ++++++++++++++++++++++ lexer/keywords.py | 107 ++++++++ lexer/lexer.py | 22 ++ 5 files changed, 422 insertions(+) create mode 100644 lexer/__pycache__/keywords.cpython-34.pyc create mode 100644 lexer/__pycache__/tokens.cpython-34.pyc create mode 100644 lexer/gtk.h create mode 100644 lexer/keywords.py create mode 100644 lexer/lexer.py diff --git a/lexer/__pycache__/keywords.cpython-34.pyc b/lexer/__pycache__/keywords.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40baa92ba89205d570ab96899848503ee7e71873 GIT binary patch literal 2120 zcmbtVTbt8V6y3e0odE+kKS>+?i^(i@*V?E83= zBWM`k9Q{HhVC2cI6$a>?eNLfWz+1og7_)%8u7Qp-x2qSzbEb!uM-c5nTCg{4{A@7M0=bhI5tUw=3^wm^m&pX z+b0RW7fFKh4U%B}1W6D-Bnj>}NrL`>Bouf?5+ZDogbpK;kYbx8)CfsJkccES*&zv8 zejo{DVv-9g3JF;Zl1CLw658A(c}#IDAyAj(aixKTN;b(8iWqs4Qlg)Tp5^IhqMHyG z+2qy|OK5f1(;ZI~>us}v*035vb2_@CW307@WpuVo%gD+d+q68x$>uwb(Q)j$;kqJk zHnL);)pfH{+qAl_&>H5d*)T+<-EDbhr}ac=y6c+DR#q||cJ-E+YZ*;%$#dgI;3m4W3@qwh&lbi0IE_SU$uaZ?S!q4?`&+oV z?i!*v=qEnx72U~-gUx;{u&L#GqBMxYBo!5S9xiEQ6?CLQIQB)kVKjBzG%K^e(I1ae zk#E={&ygq~*sKtQsVL$$%c3}n!l9@*#F^c-BC^T&+D{MruC@$Mdw_ya`@@6y32OE=0H3$czG5eEp6)^;% zKhdh=5ay&%#kht>Ic4CiSF8GQjLj;&UK4li^^~RZa?fh$-oE9TZDk$m^^^s2+a0*t zPTU`E_oun)BwwvUn?XMW_d78J-k9bVC;7$2Y3|2qPEPV`m!`QZfQ!@IHNXYDwQ271 zG{dN{MWrU~mDPc?_qwnS zroGptrB`I_zeEErnd&S*Ser8S>vrFdNvxaHKM_I+Yi%Z zZSy)3<;r$nRodFfe}Q((fB8I$Ik~#?GAjmQkZS6m?+-LoDCGX#Gl!Yw|Mkq5{^_K- lf|mQwPd+}2SgcxZhBJ=dXsQ^?DtEUd9*_Kcv)EPWe*@cm488yW literal 0 HcmV?d00001 diff --git a/lexer/__pycache__/tokens.cpython-34.pyc b/lexer/__pycache__/tokens.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad59931ffad115d33a48fe9d71a115062c4e144a GIT binary patch literal 1138 zcmbu8TbI*R6vua)>x`hNfOy9%R0S1vMiGHbo3>e&WLBDh9{UoqPunn=gq6zxE_u?A z;Rn#KbY6Y;1Ng*09UkW0BxnEjB{^qbR{lM8dfWf&&M$xJME}rS*{t)t#9shk5?=$pBK{iqhIj|qCH@xpj`%w8J@F0T2jZK+E#ljN zL%atJiAR7-JO(DjQ`&h-)DZnf^q@z-6YZjE^lv`!d|?jfkrPHjAG-cXnBl$?I`Gbp zX~8-3d{BjDq#!*e;x@VEsMGlHmu0=V^`U5G+EI~VU66e6VD=Lv0Nr?-iZDv5PdF% zh76RJ6^+nmfj<#?UKT51hwj9iBSU3Za+TGMtWb>`#i6gvN;Yj(2xC4CP^wX{%c>FP z+?)6=YOb?YA-S`K8;lj~UuC(39XXLVM7&9wEbZ(t9!7{aRhxF--}9p36!Aw{ldgr; zwFOxVt9kNJB5Ps9z8Cn)Xp5{YgdO|OPqf?O`I-9Nz#9qusLWW{cY_%YoVmh2Dsvo} zOJUrb!l8^u>&`MqLA-~!$z^*Vw(id6uF_@Rb=URdJJ5^vP?+vdXauGxAEOPZdowC! zEb}sHgfHgz7 rf*?)noxHbTTmS3c)~fT^*B|sY++=$~oI_06Hx5f~b9r-. + */ + +/* + * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * file for a list of people on the GTK+ Team. See the ChangeLog + * files for a list of changes. These files are distributed with + * GTK+ at ftp://ftp.gtk.org/pub/gtk/. + */ + +#ifndef __GTK_H__ +#define __GTK_H__ + +#define __GTK_H_INSIDE__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef GTK_DISABLE_DEPRECATED +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif /* GTK_DISABLE_DEPRECATED */ + +#include + +#undef __GTK_H_INSIDE__ + +#endif /* __GTK_H__ */ diff --git a/lexer/keywords.py b/lexer/keywords.py new file mode 100644 index 0000000..ea03bd7 --- /dev/null +++ b/lexer/keywords.py @@ -0,0 +1,107 @@ +# (c) 2018 Jan Lerking +# Python lexer for c header files. +# Used for creating corresponding NASM include files. +# Contains tokens expanded with reserved 'C' keywords + +def init(): + global tokens + tokens = [ + 'CSTART', + 'CMID', + 'CEND', + 'RPAREN', + 'LPAREN', + 'ENDLINE', + 'POINTER', + 'PREPROCESS', + 'ID', + 'PLUS', + 'MINUS', + 'DIV', + 'MULT', + 'ASSIGN', + 'EQUAL', + 'LBRACE', + 'RBRACE', + 'COMMA', + 'SEMICOLON', + 'LANGLE', + 'RANGLE' + ] + + reserved = { + 'auto' : 'AUTO', + 'break' : 'BREAK', + 'case' : 'CASE', + 'char' : 'CHAR', + 'const' : 'CONST', + 'continue' : 'CONTINUE', + 'default' : 'DEFAULT', + 'do' : 'DO', + 'int' : 'INT', + 'long' : 'LONG', + 'register' : 'REGISTER', + 'return' : 'RETURN', + 'short' : 'SHORT', + 'signed' : 'SIGNED', + 'sizeof' : 'SIZEOF', + 'static' : 'STATIC', + 'struct' : 'STRUCT', + 'switch' : 'SWITCH', + 'typedef' : 'TYPEDEF', + 'union' : 'UNION', + 'unsigned' : 'UNSIGNED', + 'void' : 'VOID', + 'volatile' : 'VOLATILE', + 'while' : 'WHILE', + 'double' : 'DOUBLE', + 'else' : 'ELSE', + 'enum' : 'ENUM', + 'extern' : 'EXTERN', + 'float' : 'FLOAT', + 'for' : 'FOR', + 'goto' : 'GOTO', + 'if' : 'IF' + } + + global preprocessor_directives + preprocessor_directives = { + '#include' : 'PREPROCESS', + '#define' : 'PREPROCESS', + '#undef' : 'PREPROCESS', + '#if' : 'PREPROCESS', + '#ifdef' : 'PREPROCESS', + '#ifndef' : 'PREPROCESS', + '#error' : 'PREPROCESS', + '__FILE__' : 'PREPROCESS', + '__LINE__' : 'PREPROCESS', + '__DATE__' : 'PREPROCESS', + '__TIME__' : 'PREPROCESS', + '__TIMESTAMP__' : 'PREPROCESS', + 'pragma' : 'PREPROCESS', + '#' : 'PREPROCESS', + '##' : 'PREPROCESS' + } + + global regular + regular = { + '/*' : 'CSTART', + '*' : 'CMID', + '*/' : 'CEND', + '=' : 'ASSIGN', + '==' : 'EQUAL', + '{' : 'LBRACE', + '}' : 'RBRACE', + '\+' : 'PLUS', + '-' : 'MINUS', + '\*' : 'MULT', + '/' : 'DIV', + '\(' : 'LPAREN', + '\)' : 'RPAREN', + ',' : 'COMMA', + ';' : 'SEMICOLON', + '\<' : 'LANGLE', + '\>' : 'RANGLE' + } + + tokens += reserved.values() \ No newline at end of file diff --git a/lexer/lexer.py b/lexer/lexer.py new file mode 100644 index 0000000..fff4e30 --- /dev/null +++ b/lexer/lexer.py @@ -0,0 +1,22 @@ +# (c) 2018 Jan Lerking +# Python lexer for c header files. +# Used for creating corresponding NASM include files. + +import keywords +import os + +keywords.init() + +lexed_line = [] + +def lex_line(l): + prep = keywords.preprocessor_directives + reg = keywords.regular + for w in l: + if w in prep: + lexed_line.append(prep(w)) + lexed_line.append(w) + break + if w in reg: + lexed_line.append(reg(w)) + lexed_line.append(w) \ No newline at end of file