From f4b7d09ddb35f014dc12e10ce4ed9f36fb67550a Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Tue, 7 May 2019 22:40:21 -0400 Subject: Add bit without build Need to do some stuff in the Makefile for lex and yacc and generating HTML pages for it. --- bin/bitlex.l | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 bin/bitlex.l (limited to 'bin/bitlex.l') diff --git a/bin/bitlex.l b/bin/bitlex.l new file mode 100644 index 00000000..4fac0a59 --- /dev/null +++ b/bin/bitlex.l @@ -0,0 +1,67 @@ +/* Copyright (C) 2019 C. McEnroe + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +%option noinput +%option nounput + +%{ + +#include + +static uint64_t parseInt(uint64_t base, const char *str) { + uint64_t num = 0; + for (const char *ch = str; *ch; ++ch) { + if (*ch == '_') continue; + num *= base; + if (*ch >= '0' && *ch <= '9') num += *ch - '0'; + if (*ch >= 'A' && *ch <= 'F') num += 0xA + *ch - 'A'; + if (*ch >= 'a' && *ch <= 'f') num += 0xA + *ch - 'a'; + } + return num; +} + +%} + +%% + +[ \t\n] ; + +0b[01_]+ { + yylval = parseInt(2, &yytext[2]); + return Int; +} +0[0-7_]+ { + yylval = parseInt(8, &yytext[1]); + return Int; +} +[0-9][0-9_]* { + yylval = parseInt(10, yytext); + return Int; +} +0x[0-9A-Fa-f_]+ { + yylval = parseInt(16, &yytext[2]); + return Int; +} +'.' { + yylval = yytext[1]; + return Int; +} + +"<<" return Shl; +">>" return Shr; +"->>" return Sar; + +. return yytext[0]; -- cgit 1.4.1