Permalink
Browse files

Introduce shell of vhdlpp program.

Create the makefiles and configuration scripts to hold together
the vhdlpp front-end program. Create a shell main.
  • Loading branch information...
1 parent ce7a6fa commit 8cf1fd1820df515cd68c051f720a3405b06b94fe @steveicarus committed Dec 13, 2010
Showing with 455 additions and 2 deletions.
  1. +7 −0 .gitignore
  2. +1 −1 Makefile.in
  3. +2 −1 configure.in
  4. +102 −0 vhdlpp/Makefile.in
  5. +24 −0 vhdlpp/compiler.h
  6. +73 −0 vhdlpp/lexor.lex
  7. +34 −0 vhdlpp/lexor_keyword.gperf
  8. +70 −0 vhdlpp/main.cc
  9. +64 −0 vhdlpp/parse.y
  10. +38 −0 vhdlpp/parse_api.h
  11. +40 −0 vhdlpp/vhdlpp_config.h.in
View
7 .gitignore
@@ -43,6 +43,13 @@ dep
/ivlpp/lexor.c
+/vhdlpp/lexor.cc
+/vhdlpp/lexor_keyword.cc
+/vhdlpp/parse.cc
+/vhdlpp/parse.h
+/vhdlpp/vhdlpp_config.h
+/vhdlpp/vhdlpp
+
/lexor.cc
/lexor_keyword.cc
/parse.cc
View
2 Makefile.in
@@ -38,7 +38,7 @@ exec_prefix = @exec_prefix@
srcdir = @srcdir@
datarootdir = @datarootdir@
-SUBDIRS = ivlpp vvp vpi libveriuser cadpli tgt-null tgt-stub tgt-vvp \
+SUBDIRS = ivlpp vhdlpp vvp vpi libveriuser cadpli tgt-null tgt-stub tgt-vvp \
tgt-vhdl tgt-vlog95 driver
# Only run distclean for these directories.
NOTUSED = tgt-fpga tgt-pal tgt-verilog
View
3 configure.in
@@ -2,6 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_INIT(netlist.h)
AC_CONFIG_HEADER(config.h)
AC_CONFIG_HEADER(_pli_types.h)
+AC_CONFIG_HEADER(vhdlpp/vhdlpp_config.h)
AC_CONFIG_HEADER(vvp/config.h)
AC_CONFIG_HEADER(vpi/vpi_config.h)
AC_CONFIG_HEADER(libveriuser/config.h)
@@ -295,4 +296,4 @@ AC_MSG_RESULT(ok)
# XXX disable tgt-fpga for the moment
-AC_OUTPUT(Makefile ivlpp/Makefile vvp/Makefile vpi/Makefile driver/Makefile driver-vpi/Makefile cadpli/Makefile libveriuser/Makefile tgt-null/Makefile tgt-stub/Makefile tgt-vvp/Makefile tgt-vhdl/Makefile tgt-fpga/Makefile tgt-verilog/Makefile tgt-pal/Makefile tgt-vlog95/Makefile)
+AC_OUTPUT(Makefile ivlpp/Makefile vhdlpp/Makefile vvp/Makefile vpi/Makefile driver/Makefile driver-vpi/Makefile cadpli/Makefile libveriuser/Makefile tgt-null/Makefile tgt-stub/Makefile tgt-vvp/Makefile tgt-vhdl/Makefile tgt-fpga/Makefile tgt-verilog/Makefile tgt-pal/Makefile tgt-vlog95/Makefile)
View
102 vhdlpp/Makefile.in
@@ -0,0 +1,102 @@
+#
+# This source code is free software; you can redistribute it
+# and/or modify it in source code form under the terms of the GNU
+# Library General Public License as published by the Free Software
+# Foundation; either version 2 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 Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free
+# Software Foundation, Inc.,
+# 59 Temple Place - Suite 330
+# Boston, MA 02111-1307, USA
+#
+SHELL = /bin/sh
+
+suffix = @install_suffix@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+srcdir = @srcdir@
+
+VPATH = $(srcdir)
+
+bindir = @bindir@
+libdir = @libdir@
+includedir = $(prefix)/include
+
+CC = @CC@
+CXX = @CXX@
+INSTALL = @INSTALL@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+LEX = @LEX@
+YACC = @YACC@
+
+ifeq (.,.)
+INCLUDE_PATH = -I. -I..
+else
+INCLUDE_PATH = -I. -I.. -I$(srcdir) -I$(srcdir)/..
+endif
+
+CPPFLAGS = $(INCLUDE_PATH) @CPPFLAGS@ @DEFS@
+CFLAGS = @WARNING_FLAGS@ @CFLAGS@
+CXXFLAGS = @WARNING_FLAGS@ @WARNING_FLAGS_CXX@ @CXXFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@ @EXTRALIBS@
+
+O = main.o lexor.o lexor_keyword.o parse.o
+
+all: dep vhdlpp@EXEEXT@
+
+clean:
+ rm -f *.o *~
+ rm -rf dep vhdlpp@EXEEXT@
+
+distclean: clean
+ rm -f Makefile config.log
+ rm -f stamp-vhdlpp_config-h vhdlpp_config.h
+
+Makefile: $(srcdir)/Makefile.in
+ cd ..; ./config.status --file=vhdlpp/$@
+
+dep:
+ mkdir dep
+
+vhdlpp@EXEEXT@: $O
+ $(CXX) -o vhdlpp@EXEEXT@ $(LDFLAGS) $O $(LIBS)
+
+%.o: %.cc vhdlpp_config.h
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) @DEPENDENCY_FLAG@ -c $< -o $*.o
+ mv $*.d dep/$*.d
+
+lexor.o: lexor.cc parse.h
+
+parse.o: parse.cc
+
+lexor.cc: $(srcdir)/lexor.lex
+ $(LEX) -s -olexor.cc $(srcdir)/lexor.lex
+
+parse.cc parse.h: $(srcdir)/parse.y
+ $(YACC) --verbose -t -d -o parse.cc $(srcdir)/parse.y
+ mv parse.cc.h parse.h 2>/dev/null || mv parse.hh parse.h
+
+lexor_keyword.o: lexor_keyword.cc parse.h
+
+lexor_keyword.cc: $(srcdir)/lexor_keyword.gperf
+ gperf -o -i 7 --ignore-case -C -k 1-4,6,9,$$ -L ANSI-C -H keyword_hash -N check_identifier -t $(srcdir)/lexor_keyword.gperf > lexor_keyword.cc || (rm -f lexor_keyword.cc ; false)
+
+
+stamp-vhdlpp_config-h: $(srcdir)/vhdlpp_config.h.in ../config.status
+ @rm -f $@
+ cd ..; ./config.status --header=vhdlpp/vhdlpp_config.h
+vhplpp_config.h: stamp-vhdlpp_config-h
+
+
+-include $(patsubst %.o, dep/%.d, $O)
View
24 vhdlpp/compiler.h
@@ -0,0 +1,24 @@
+#ifndef __compiler_H
+#define __compiler_H
+/*
+ * Copyright (c) 1999-2010 Stephen Williams (steve@icarus.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form under the terms of the GNU
+ * General Public License as published by the Free Software
+ * Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+const int GN_KEYWORD_2008 = 0x0001;
+
+#endif
View
73 vhdlpp/lexor.lex
@@ -0,0 +1,73 @@
+
+%option never-interactive
+%option nounput
+%option noyywrap
+
+%{
+/*
+ * Copyright (c) 2011 Stephen Williams (steve@icarus.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form under the terms of the GNU
+ * General Public License as published by the Free Software
+ * Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+# include "parse_api.h"
+# include "lexor_keyword.h"
+
+extern int lexor_keyword_code (const char*str, unsigned len);
+
+/*
+ * Lexical location information is passed in the yylloc variable to th
+ * parser. The file names, strings, are kept in a list so that I can
+ * re-use them. The set_file_name function will return a pointer to
+ * the name as it exists in the list (and delete the passed string.)
+ * If the name is new, it will be added to the list.
+ */
+YYLTYPE yylloc;
+
+static int comment_enter;
+
+%}
+
+%x CCOMMENT
+%x LCOMMENT
+
+W [ \t\b\f\r]+
+
+%%
+
+[ \t\b\f\r] { ; }
+\n { yylloc.first_line += 1; }
+
+ /* Single-line comments start with - - and run to the end of the
+ current line. These are very easy to handle. */
+
+"--".* { comment_enter = YY_START; BEGIN(LCOMMENT); }
+<LCOMMENT>. { yymore(); }
+<LCOMMENT>\n { yylloc.first_line += 1; BEGIN(comment_enter); }
+
+
+
+ /* The contents of C-style comments are ignored, like white space. */
+
+"/*" { comment_enter = YY_START; BEGIN(CCOMMENT); }
+<CCOMMENT>. { ; }
+<CCOMMENT>\n { yylloc.first_line += 1; }
+<CCOMMENT>"*/" { BEGIN(comment_enter); }
+
+[a-zA-Z_][a-zA-Z0-9_]* {
+ int rc = lexor_keyword_code(yytext, yyleng);
+ return rc;
+ }
View
34 vhdlpp/lexor_keyword.gperf
@@ -0,0 +1,34 @@
+/*
+ * We need this to prevent -Wextra (-W) from complaining that the mask and
+ * tokenType values are not initialized for the empty table entries.
+ */
+%define initializer-suffix ,0,0
+
+%{
+/* Command-line: gperf -o -i 1 --ignore-case -C -k 1-3,$ -L C -H keyword_hash -N check_identifier -tT lexor_keyword.gperf */
+
+#include "vhdlpp_config.h"
+#include <cstring>
+#include "compiler.h"
+#include "parse.h"
+
+%}
+struct lexor_keyword { const char*name; int mask; int tokenType; };
+%%
+abs, GN_KEYWORD_2008, K_abs
+access, GN_KEYWORD_2008, K_access
+architecture, GN_KEYWORD_2008, K_architecture
+%%
+
+int lexor_keyword_mask = GN_KEYWORD_2008;
+
+int lexor_keyword_code(const char*str, unsigned nstr)
+{
+ const struct lexor_keyword*rc = check_identifier(str, nstr);
+ if (rc == 0)
+ return IDENTIFIER;
+ else if ((rc->mask & lexor_keyword_mask) == 0)
+ return IDENTIFIER;
+ else
+ return rc->tokenType;
+}
View
70 vhdlpp/main.cc
@@ -0,0 +1,70 @@
+
+const char COPYRIGHT[] =
+ "Copyright (c) 2011 Stephen Williams (steve@icarus.com)";
+
+/*
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form under the terms of the GNU
+ * General Public License as published by the Free Software
+ * Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+# include "vhdlpp_config.h"
+# include "version_base.h"
+# include "version_tag.h"
+
+const char NOTICE[] =
+" This program is free software; you can redistribute it and/or modify\n"
+" it under the terms of the GNU General Public License as published by\n"
+" the Free Software Foundation; either version 2 of the License, or\n"
+" (at your option) any later version.\n"
+"\n"
+" This program is distributed in the hope that it will be useful,\n"
+" but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+" GNU General Public License for more details.\n"
+"\n"
+" You should have received a copy of the GNU General Public License along\n"
+" with this program; if not, write to the Free Software Foundation, Inc.,\n"
+" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n"
+;
+
+# include <stdio.h>
+# include <stdlib.h>
+#if defined(HAVE_GETOPT_H)
+# include <getopt.h>
+#endif
+
+int main(int argc, char*argv[])
+{
+ int opt;
+
+ while ( (opt=getopt(argc, argv, "vV")) != EOF) switch (opt) {
+
+ case 'v':
+ fprintf(stderr, "Icarus Verilog VHDL Parse version "
+ VERSION " (" VERSION_TAG ")\n\n");
+ fprintf(stderr, "%s\n\n", COPYRIGHT);
+ fputs(NOTICE, stderr);
+ break;
+
+ case 'V':
+ fprintf(stdout, "Icarus Verilog VHDL Parse version "
+ VERSION " (" VERSION_TAG ")\n\n");
+ fprintf(stdout, "%s\n\n", COPYRIGHT);
+ fputs(NOTICE, stdout);
+ break;
+
+ }
+
+ return 0;
+}
View
64 vhdlpp/parse.y
@@ -0,0 +1,64 @@
+
+%{
+/*
+ * Copyright (c) 2011 Stephen Williams (steve@icarus.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form under the terms of the GNU
+ * General Public License as published by the Free Software
+ * Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+# include "vhdlpp_config.h"
+# include "parse_api.h"
+
+static void yyerror(const char*msg);
+
+%}
+
+ /* The keywords are all tokens. */
+%token K_abs K_access K_after K_alias K_all K_and K_architecture
+%token K_array K_assert K_assume K_assume_guarantee K_attribute
+%token K_begin K_block K_body K_buffer K_bus
+%token K_case K_component K_configuration K_constant K_context K_cover
+%token K_default K_disconect K_downto
+%token K_else K_elsif K_end K_entity K_exit
+%token K_fairness K_file K_for K_force K_function
+%token K_generate K_generic K_group K_guarded
+%token K_if K_impure K_in K_internal K_inout K_is
+%token K_label K_library K_linkage K_literal K_loop
+%token K_map K_mod
+%token K_nand K_new K_next K_nor K_not K_null
+%token K_of K_on K_open K_or K_others K_out
+%token K_package K_parameter K_port K_postponed K_procedure K_process
+%token K_property K_protected K_pure
+%token K_range K_record K_register K_reject K_release K_rem K_report
+%token K_restrict K_restrict_guarantee K_return K_rol K_ror
+%token K_select K_sequence K_seerity K_signal K_shared
+%token K_sla K_sll K_sra K_srl K_string K_subtype
+%token K_then K_to K_transport K_type
+%token K_unaffected K_units K_until K_use
+%token K_variable K_vmode K_vprop K_vunit
+%token K_wait K_when K_while K_with
+%token K_xnor K_xor
+ /* Identifiers that are not keywords are identifiers. */
+%token IDENTIFIER
+%%
+
+main : ;
+
+%%
+
+static void yyerror(const char*msg)
+{
+}
View
38 vhdlpp/parse_api.h
@@ -0,0 +1,38 @@
+#ifndef __parse_api_H
+#define __parse_api_H
+/*
+ * Copyright (c) 2011 Stephen Williams (steve@icarus.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form under the terms of the GNU
+ * General Public License as published by the Free Software
+ * Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+/*
+ * The vlltype supports the passing of detailed source file location
+ * information between the lexical analyzer and the parser. Defining
+ * YYLTYPE compels the lexor to use this type and not something other.
+ */
+struct yyltype {
+ unsigned first_line;
+ unsigned first_column;
+ unsigned last_line;
+ unsigned last_column;
+ const char*text;
+};
+# define YYLTYPE struct yyltype
+
+extern int yylex(void);
+
+#endif
View
40 vhdlpp/vhdlpp_config.h.in
@@ -0,0 +1,40 @@
+#ifndef __vhdlpp_config_H /* -*- c++ -*- */
+#define __vhdlpp_config_H
+/*
+ * Copyright (c) 2011 Stephen Williams (steve@icarus.com)
+ *
+ * This source code is free software; you can redistribute it
+ * and/or modify it in source code form under the terms of the GNU
+ * General Public License as published by the Free Software
+ * Foundation; either version 2 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#if defined(__cplusplus)
+# if !defined(__GNUC__)
+ using namespace std;
+# elif (__GNUC__ == 3)
+ using namespace std;
+# endif
+#endif
+
+# undef HAVE_GETOPT_H
+# undef HAVE_INTTYPES_H
+# undef HAVE_LIBIBERTY_H
+# undef HAVE_FCHMOD
+# undef HAVE_SYS_WAIT_H
+
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#endif /* __config_H */

0 comments on commit 8cf1fd1

Please sign in to comment.