GithubHelp home page GithubHelp logo

lexxmark / winflexbison Goto Github PK

View Code? Open in Web Editor NEW
389.0 24.0 113.0 8.31 MB

Main winflexbision repository

License: GNU General Public License v3.0

C++ 4.52% C 86.82% Makefile 0.05% XSLT 1.09% PowerShell 0.01% Yacc 0.45% M4 6.05% CMake 0.13% Batchfile 0.01% Shell 0.01% CSS 0.03% Java 0.85%
bison gnu-bison winflexbison flex

winflexbison's Introduction

WinFlexBison - Flex and Bison for Microsoft Windows

WinFlexBison is a Windows port of Flex (the fast lexical analyser) and GNU Bison (parser generator). Both win_flex and win_bison are based on upstream sources but depend on system libraries only.

NOTE:

  • 2.4.x versions include GNU Bison version 2.7
  • 2.5.x versions include GNU Bison version 3.x.x

License

Flex uses a BSD license, GNU Bison is licensed under the GNU General Public License (GPLv3+).
All build scripts in WinFlexBison are distributed under GPLv3+. See COPYING for details.

All documentation, especially those under custom_build_rules/doc, is distributed under the GNU Free Documentation License (FDL 1.3+).

Build status

Bison 3.x (master) Build status and, for compatibility reasons, Bison 2.7 (bison2.7) Build status

Downloads

https://github.com/lexxmark/winflexbison/releases provides stable versions. To test non-released development versions see the artifacts provided by CI under "Build status".

Changelog

The release page includes the full Changelog but you may also see the changelog.md file.

Build requirements

  • Visual Studio 2017 or newer
  • optional: CMake (when building with CMake)

HowTo

You may use win_flex and win_bison directly on the command line or use them via CustomBuildRules in VisualStudio.

Example flex/bison files

See https://github.com/meyerd/flex-bison-example

winflexbison's People

Contributors

aaronngray avatar andrej-andrejev avatar christoph-cullmann avatar croydon avatar fa-so avatar geoffmcl avatar gitmensch avatar jonnysoe avatar lexxmark avatar ligfx avatar longhronshen avatar obhi-d avatar yjh-styx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

winflexbison's Issues

chocolatey package and include paths

Issue from Gianluca Sforna:

Linux guy here, trying to understand how to integrate this package in my build enviroment based on cmake. Basically, cmake's find_package(FLEX) and find_package(BISON) macros work, but the FLEX_INCLUDE_DIR is not populated so FlexLexer.h is not found during build. I assume this is because the shim for the executables works as expected (Flex is found as C:/ProgramData/chocolatey/bin/win_flex.exe) but the header is not in the same directory.

Anyone has an hint for me about the best way to fix this?

Reentrant flex/bison call yylex convention

When I use %option api.pure in parser.y and add #define YYLEX_PARAM pData->scaninfo. The generate file parser.tab.cpp just only #define YYLEX yylex (&yylval) which is not match the lexer.l generate function extern int yylex(YYSTYPE* yylval_param, yyscan_t yyscanner);

here is my sample
lexer.l:

%option noyywrap nodefault yylineno never-interactive reentrant bison-bridge
%option nounistd
%option header-file="lexer.flex.h"
%{
	#include <stdio.h>
        #include "PureData.h"
	#include "parser.tab.h"	/*reference parser generate tab.h*/
%}
%option extra-type = "struct PureData *"
%%
%{
	struct PureData *pData = yyextra;
%}
/* other lex rules */
%%

parser.y:

%define api.pure
%parse-param { struct PureData *pData }
/*%lex-param { pData->scaninfo }*/
%{
        #include "PureData.h"
	#define YY_NO_UNISTD_H	//this is flex bug, unistd.h also include in flex.h
	#include "lexer.flex.h"
	#define YYLEX_PARAM pData->scaninfo
	void yyerror(struct PureData* pData, char const *s);
%}
%union{
	int intval;
}
%%
/* other grammar */
%%
void yyerror(struct PureData* pData, char const *s) { }

PureData.h:

class ASTNode{
};
typedef void* yyscan_t;
struct PureData
{
	yyscan_t scaninfo;
	ASTNode* astRoot;
};

Also I have attempted use %lex-param { pData->scaninfo }, but it generates #define YYLEX yylex (&yylval, scaninfo).
So how can I fix it? My version is win_flexbison 2.4.6/2.5.6.

I only get them by <<flex & bison>> Jobn Levine. Is there any other books or examples about reentrant flex/bison?

Bison Windows executable for 3.5.4+

Because of a CVE we are looking for Bison 3.5.4 or higher version.

I can see that version 2.5.22 (bison 3.5.0) is the last stable release. Is there any timeline for any 3.5.4+ stable release?

Thank you!

Can not fix file via --update

Seems renaming file fails before the update process can be executed.

Call arguments:
win_bison --update file.y

Output:
cannot backup: Permission denied

Visual Studio 2017 and inttypes.h

When I use latest win_flex.exe, the code produced, even in --wincompat mode contains lines like:

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN       

Unfortunately, Visual Studio does not set STDC_VERSION but has inttypes.h. Because the #else part of the code is used, duplicate macros for e.g. INT8_MIN will exist (and raise an compiler warning or even error if C4005 is marked as error, as was done in our case). Example:

1> c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\stdint.h(48): error C4005: 'INT8_MIN': macro redefinition
1> t:\obj.dbg.winx64\lib\sql\libsql_c\sqllex.cpp(57): note: see previous definition of 'INT8_MIN'
1> c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\stdint.h(49): error C4005: 'INT16_MIN': macro redefinition
1> t:\obj.dbg.winx64\lib\sql\libsql_c\sqllex.cpp(60): note: see previous definition of 'INT16_MIN'

Can you please enhance this macro and add a check on _MSCVER? The inttypes.h file is (at least) in any Windows 10 SDK. The other approach is to include stdint.h, which is - at least - existent for Visual Studio 2017 and later.

Any other suggestions are welcome.

register keyword used in the generated lexer

register keyword used in the generated lexer such as the following:
register yy_size_t number_to_move = (yy_n_chars) + 2;

c++11 has deprecated the "register" keyword. register keyword is a hint to the compiler.

It would be nice if we can remove the "register" keyword from the generated scanner for at least c++, if not for c.

Some compilers have started printing a warning message if c++11x option is choosen to compile the scanner, and causes issue in the build system

Thanks,
-Khaled

2.5.15 is no longer available on SourceForge

https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/builds/21472324/job/ki94fn95ipm6bs50

Chocolatey v0.10.8
Installing the following packages:
winflexbison3
By installing you accept licenses for the packages.
Progress: Downloading winflexbison3 2.5.15.20180823... 100%
winflexbison3 v2.5.15.20180823 [Approved]
winflexbison3 package files install completed. Performing other installation steps.
WARNING: Url has SSL/TLS available, switching to HTTPS for download
Downloading winflexbison3
from 'https://sourceforge.net/projects/winflexbison/files/old_versions/win_flex_bison-2.5.15.zip'
ERROR: The remote file either doesn't exist, is unauthorized, or is forbidden for url 'https://sourceforge.net/projects/winflexbison/files/old_versions/win_flex_bison-2.5.15.zip'. Exception calling "GetResponse" with "0" argument(s): "The request was aborted: Could not create SSL/TLS secure channel."
This package is likely not broken for licensed users - see https://chocolatey.org/docs/features-private-cdn.
The install of winflexbison3 was NOT successful.
Error while running 'C:\ProgramData\chocolatey\lib\winflexbison3\tools\chocolateyInstall.ps1'.
See log for details.
Chocolatey installed 0/1 packages. 1 packages failed.
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
Failures

  • winflexbison3 (exited 404) - Error while running 'C:\ProgramData\chocolatey\lib\winflexbison3\tools\chocolateyInstall.ps1'.
    See log for details.
    Command exited with code 404

Fixing compile-time warnings

We have updated to the latest version of winflexbison after switching to C++17. Good news is that there are no more register variables in the generated code.

However, there are two new warnings in the generated code introduced by winflexbison version 2.6.3, which were not the case with version 2.5.37:

  1. (possible information loss) In yyuserAction() argument size_t yyrhslen is used to to compute an argument to yyfill(), which is int.

  2. (macro redefined) Macro yylex is defined in lexer and then re-defined in parser (yes, we use an intermediate layer, hence

#define yylex core_yylex

in the scanner (no such declaration here with v.2.5.37), and

#define yylex   base_yylex

in the parser.

The second problem might be related to westes/flex#162, which is fixed there.

Visual Studio dependencies and the provided CustomBuildRules

Leaving this here for now, but please see update.

Many thanks for this project!

Maybe the CustomBuildRules instructions need an update for allowing compiling based on dependency timestamp handling?

This is the first time I'm using winflexbison or Visual Studio (I mostly do linux/unix), so perhaps I'm missing something, but I was surprised that VS only half-way handled dependencies for the bison outputs:

I was having an issue in Visual Studio 2019. VS would run bison if the *.tab.* files did not exist, but would not run bison if the *.y bison file had been changed. The issue turned out that the *.tab.* files (and all other source/header files) by default had a property of properties/general/exclude-from-build. Setting that property to "no" caused VS to understand that it needed to run bison whenever the *.y file changed (and also invoke the compiler for the *.tab.cpp and other source files).

I don't know if default exclude-from-build=yes is a recent change to VS, or if I somehow unexpectedly changed the stock defaults, or if the bison/flex rules could be updated to somehow set exclude-from-build=no when adding the *.tab.* files to a project. If this is normal VS behavior and the custom rules can't help with the exclude-from-build settings, then I suggest the instructions on the CustomBuildRules be updated to advise people to reset the exclude-from-build property when adding the *.tab.* files to a project.

Update to bison 3.7.4

Bison 3.7.4 was released, solving the original issue.

Originally posted by @GitMensch in #67 (comment)

Noteworthy changes in release 3.7.4 (2020-11-14) [stable]

Bug fixes

Bug fixes in yacc.c

In Yacc mode, all the tokens are defined twice: once as an enum, and then
as a macro. YYEMPTY was missing its macro.

Bug fixes in lalr1.cc

The lalr1.cc skeleton used to emit internal assertions (using YY_ASSERT)
even when the parse.assert %define variable is not enabled. It no
longer does.

The private internal macro YY_ASSERT now obeys the api.prefix %define
variable.

When there is a very large number of tokens, some assertions could be long
enough to hit arbitrary limits in Visual C++. They have been rewritten to
work around this limitation.

Changes

The YYBISON macro in generated "regular C parsers" (from the "yacc.c"
skeleton) used to be defined to 1. It is now defined to the version of
Bison as an integer (e.g., 30704 for version 3.7.4).

virus scanner complains

I have an issue meaning I can't install flex on our build server because the virus scanner freaks out.
I ran the check on but the prebuild binaries and my own compiled version using this virus scanner
https://www.virustotal.com/#/home/upload

ALYac                                   Gen:Variant.Graftor.419163
Arcabit                                 Trojan.Graftor.D6655B
Cybereason                          malicious.1b8fb7
F-Secure                               Gen:Variant.Graftor.419163

v2.5.23 not working on Windows XP

We migrated our entire project to v2.5.23 (Bison-3.7.1) and everything worked wonderfully on Windows 10. However today when I tried on windows-XP I am getting the following error - bison: cannot execute: %1 is not a valid Win32 application.

Win 10 -

$ bison.exe --version
bison (GNU Bison) 3.7.1
Written by Robert Corbett and Richard Stallman.

Win XP -

$ bison.exe --version
bison: cannot execute: %1 is not a valid Win32 application.

Can you please help? I was able to build my project on XP using the Bison executable for Bison-2.4

edit -

$ file bison.exe
bison.exe:      extended DOS executable (.EXE) -- Win32 or NT Portable format

Bison 3.1 has been released

See announcement at [https://savannah.gnu.org/forum/forum.php?forum_id=9225] (dated Tue 28 Aug 2018 04:28:44 AM UTC)

Won't compile under MSVC 2017 preview

MSVC 2017 compiler errors out on negating an unsigned in location.cc:80

-static_cast(rhs)

All that's needed to get it to compile is to change it to

static_cast(-rhs)

It's better to negate the int, then cast to unsigned rather than cast to unsigned, then negate

win_bison: add (optional) textstyle dependency (colored output)

As noted in #45 the current release is without textstyle. It would be good if win_bison could be built with/without textstyle (not sure if we can compile it "with") and, if the size increase is not too big, also use the textstyle version to get full colored output for the releases.

win_bison can't find data directory unless it's in the current directory

Starting with 2.5.19, if the data/ directory isn't in the current directory, running win_bison gives the following error: data/m4sugar/m4sugar.m4: cannot open: No such file or directory

Looking at the git history, this broke while merging the upstream changes. bison/src/main.c doesn't use get_local_pkgdatadir() anymore, which had been patched to use get_app_path() from common/misc/app_path.c. Instead, the datadir is fetched by calling pkgdatadir() in bison/src/files.c. So, that function needs to be changed to call get_app_path() and return that path.

update release page to include history of the releases and binaries

It is simply nice to have the history shown in the release page to know what changed - for an example see https://github.com/Bill-Gray/PDCurses/releases (if you want me to I'm fine to do the same here, but this would need rights on this project).
As you release the binaries on SF already it would be also nice to have the binaries here next to the sources in the release (if you are fine with this and assign rights [could be temporary, too] I'd do it to polish the release page).

Can we delete 3.x branches?

Just asking @lexxmark before doing so.
This would leave us with master, the 2.7 branch and development (which includes adjustments added for running the tests [I'll likely not come to this in the next weeks but still plan to do that "someday"]).

Visual Studio - win_bison creates tab.h file exceeding compiler limits

Tools:
win_flex -V reports:win_flex 2.6.4
win_bison -V reports: bison (GNU Bison) 3.7.1
Microsoft Visual Studio Community 2019, Version 16.7.7

I am new to flex/bison and am setting up parsing of a subset of SQL.
I have around 830 tokens entered in my source file.

When I started out with simple C files and using stdio - everything compiled and worked fine.
I decided to adapt it to c++. After a very painful migration (can't find good docs) I finally got everything to almost work.

I've narrowed down the issue:

There is a point in the bison generated *.tab.h file where it does a YY_ASSERT(of all tokens)
With over 830 tokens, including the ones used internally (like EOF), the assert line is rather long: over 21740 chars!
This leads into a compiler error: error C2026: string too big, trailing characters truncated
Ha - you just can't truncate line of source code and get away with it!

microsoft docs re: C2026: The string was longer than the limit of 16380 single-byte characters.

bison generated header file: (including YY_ASSERT line I had to comment out

      /// Constructor for valueless symbols, and symbols from each type.
#if 201103L <= YY_CPLUSPLUS
      symbol_type (int tok, location_type l)
        : super_type(token_type (tok), std::move (l))
      {
// The next line had no compiler complaints. I guess I'm just not invoking this routine (yet).
        YY_ASSERT (tok == token::YYEOF || tok == token::YYerror || tok == token::YYUNDEF || tok == ..... (too long to paste here
      }
#else
      symbol_type (int tok, const location_type& l)
        : super_type(token_type (tok), l)
      {
// C2026 error on the next line: Over 21740 chars long. Commenting it out is a workaround.
//        YY_ASSERT (tok == token::YYEOF || tok == token::YYerror || tok == token::YYUNDEF || tok == ..... too long to paste here
      }

My only remedy, at this point, is to compile, edit the header file to comment out that line, and continue - each time.

Any other workarounds for this? It is a bit of a pain when building everything.

Remove fork status

Since this seems to be a permanent fork of AaronNGray/winflexbison I think it would be beneficial to remove the fork status of this repository.

Unfortunately, there is no automatic way for this, but you can just write two lines to the GitHub spport and they will remove it happily. I have done it several times myself :)

--header-file option in the latest win_flex

Does the --header-file option in the win_flex in
win_flex_bison-2.5.8.zip work?
I have tested
win_flex -o f-l.c --header-file=f-l.h gabc-score-determination.l
by using a source in gregorio-5.0.0-beta1.
The header file f-l.h is not generated.
In the case of the win_flex in win_flex_bison-2.5.6.zip,
both of f-l.c and f-l.h were generated.

Crash on invalid input

From sourceforge:

rpcalc___win_bison_2.5.23_crash.zip

The attached file is the first example in chapter 2 of the Bison manual with minor changes including at least one typo. Bison crashes while processing the file. I did not look that closely at the cause of the crash except to see that a NULL pointer was being accessed when it appeared that several functions were exiting. The win_bison program was invoked with no arguments besides the name of the file. The latest released version of win_bison, 2.5.23, was being used.

Trouble compiling a *.l file using CMake

I'm trying to compile the provided c++ example from the doc:

%{
#include <iostream>
using namespace std;
int mylineno = 0;
%}

%option noyywrap c++

string  \"[^\n"]+\"

ws      [ \t]+

alpha   [A-Za-z]
dig     [0-9]
name    ({alpha}|{dig}|\$)({alpha}|{dig}|[_.\-/$])*
num1    [-+]?{dig}+\.?([eE][-+]?{dig}+)?
num2    [-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)?
number  {num1}|{num2}

%%

{ws}    /* skip blanks and tabs */

"/*"    {
        int c;

        while((c = yyinput()) != 0)
            {
            if(c == '\n')
                ++mylineno;

            else if(c == '*')
                {
                if((c = yyinput()) == '/')
                    break;
                else
                    unput(c);
                }
            }
        }

{number}  cout << "number " << YYText() << '\n';

\n        mylineno++;

{name}    cout << "name " << YYText() << '\n';

{string}  cout << "string " << YYText() << '\n';

%%

// This include is required if main() is an another source file.
//#include <FlexLexer.h>

int main( int /* argc */, char** /* argv */ )
{
    FlexLexer* lexer = new yyFlexLexer;
    while(lexer->yylex() != 0)
        ;
    return 0;
}

I've also put the path to the winflexbison folder in my PATH environment variable. Using this CMake file:


cmake_minimum_required(VERSION 3.17)
project(myproject)

set(CMAKE_CXX_STANDARD 11)

find_package(BISON)
find_package(FLEX)

FLEX_TARGET(lexer lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)

add_executable(myproject main.cpp ${FLEX_lexer_OUTPUTS})

It will always say:

fatal error: FlexLexer.h: No such file or directory
 
          ^            
compilation terminated.

Inside the lexer.cpp file generated is not able to localize FlexLexer.h. Am I missing something?

Loss of data conversion in Flex scanner.

In a test project I get the following warning: Details will follow below.

warning C4244: 'return': conversion from 'std::streamsize' to 'int', possible loss of data

Related code:
// YY_INTERACTIVE is not defined, refactored (by removing preprocessor directives) to make it shorter.
int yyFlexLexer::LexerInput( char* buf, int max_size )
{
if ( yyin.eof() || yyin.fail() ) return 0;
(void) yyin.read( buf, max_size );
if ( yyin.bad() ) return -1;
else return yyin.gcount(); // <-- This line is causing the warning
}

I am using Visual Studio 2017 with the latest version of win_bison_flex (win_flex_bison3-latest.zip)
As test project I use the source from Flex Bison C++ Example
There were a few minor things I had to fix but the code compiles and runs without apparent problems.

The scanner code generated by Flex is causing this warning.
I do not see a way to redefine or otherwise fix the definition of int yyFlexLexer::LexerInput(...).
I would like to change it to long long yyFlexLexer::LexerInput(...)

Does anybody have an advise on how to handle this problem?
When parsing large files this can become an issue and I don't like compiler warnings anyway.

Kind regards.

CMake based build produces executable with more dependencies

Executables from solution files have following dependencies:
win_bison -> kernel32.dll
win_flex -> kernel32.dll, ws2_32.dll

CMake based builds:
win_bison -> kernel32.dll, vcruntime140.dll
win_flex ->kernel32.dll, ws2_32.dll, vcruntime140.dll

Install guide lines?

Hi, first thanks for the time you put into this project. It is much appreciated, at least by me ;-)

I have one question about the use of winflexbison.
The documentation says to use the command line or use de Visual studio build rules. Both are clear to me.

I want to replace the executables to another location on my disk.
What can I do with the skeleton (and other) files?
Is there a presumed structure or can I put it all in one directory?

I also have a GnuWin32 version of Flex/Bison available (And it performs fine for C projects).
Can I mix the two? (Most likely not) Any advise on how to keep them both available but separated? The difference in executable names should be enough to select the correct version.

Kind regards,
Andre.

Update to Bison 3.8.1

Bison 3.7.5 was released:

Noteworthy changes in release 3.7.5 (2021-01-24) [stable]

** Bug fixes

*** Counterexample Generation

In some cases counterexample generation could crash. This is fixed.

*** Fix Table Generation

In some very rare conditions, when there are many useless tokens, it was
possible to generate incorrect parsers.

*** GLR parsers now support %merge together with api.value.type=union.

*** C++ parsers use noexcept in more places.

*** Generated parsers avoid some warnings about signedness issues.

*** C-language parsers now avoid warnings from pedantic clang.

*** C-language parsers now work around quirks of HP-UX 11.23 (2003).

** Changes

*** C++ value_type

Prefer value_type to semantic_type to denote the semantic value type,
specified by the api.value.type %define variable.

*** GLR traces

There were not debug traces for deferred calls to user actions. They are
logged now.

** New features

*** Option -H, --header and directive %header

The option -H/--header supersedes the option --defines, and the
directive %header supersedes %defines. Both --defines and %defines
are, of course, maintained for backward compatibility.

*** Option --html

Since version 2.4 Bison can be used to generate HTML reports. However it
was a two-step process: first bison must be invoked with option --xml,
and then xsltproc must be run to the convert the XML reports into HTML.

The new option --html combines these steps. The xsltproc program must
be available.

*** A C++ native GLR parser

A new version of the generated C++ GLR parser was added as "glr2.cc". It
is forked from the existing glr.c/cc parser, with the objective of making
it a more modern, truly C++ parser (instead of a C++ wrapper around a C
parser). Down the line, the goal is to support %define api.value.type variant and maybe share code with lalr1.cc.

The current parser should be identical in terms of interface, functionality
and performance to "glr.cc". To try it out, simply use

%skeleton "glr2.cc"

*** Counterexamples

Counterexamples now show the rule numbers, and always show ฮต for rules
with an empty right-hand side. For instance

exp
โ†ณ 1: e1       e2     "a"
     โ†ณ 3: ฮต โ€ข โ†ณ 1: ฮต

instead of

exp
โ†ณ e1  e2  "a"
  โ†ณ โ€ข โ†ณ ฮต

*** Lookahead correction in Java

The Java skeleton (lalr1.java) now supports LAC, via the parse.lac
%define variable.

*** Abort parsing for memory exhaustion (C)

The user actions may now use YYNOMEM to abort the current parse with
memory exhaustion.

Encoding of lexical file and it generates flex.cpp file

In the past, I can write UTF-8 char in my lexical file and it work well.
But, after some days, maybe I change visual studio generate .cpp encoding, the VS template file? I can't remember exactly. The VS warning flex.cpp file contains a character that cannot be represented in the current code page (936). ( Chinese GB2312 ) , and compile fail, output mystery error.

So, how can I use UTF-8 char in lexical file? or how to set VS settings properly?
Now I only use them in comment, so i can change them to english, and it work well, but maybe I will need to recognize them in the future.

I use flex/bison 2.4.6/2.5.6 and vs 2013.
Sorry for my poor English.

Copy the first part of user declarations not into y.tab.h?

If I declare a YYSTYPE type like char*, it is copied into y.tab.c, which would make YYSTYPE default to int in yy.tab.h. This caused some memory errors when compiled with visual studio cl.exe. Problem was solved when I manually copied YYSTYPE declaration into y.tab.h before typedef int YYSTYPE.

Cannot compile Bison input in C++ mode

I am trying to use both Bison and Flex in C++ mode so I can utilise features like vectors. I am using Visual Studio 2019 and the pre-compiled win_flex_bison3-latest.zip as found here to make my custom build rules (version 3.7.4).

I have attempted to enable C++ input by adding %require "3.7.4" and %language "c++" to the prologue. When I then try to rebuild my solution it results in some 109 errors.

Bison Input

%require "3.7.4"
%language "c++"
%define api.value.type variant

%{
#include <stdlib.h>
#include <stdio.h>
#include <vector>
extern "C" int yylex();
void yyerror(const char*);
extern int yy_flex_debug;
float *stmts;
void print(float *start, float *end);
%}

// Assign tokens to member of union
%token <ival> INTEGER
%token <fval> FLOAT
%type <fval> expr 
%type <std::vector<float>> stmt_list;
// Associativity
%left '-' '+'
%left '*' '/'

%%

// Formal grammar
program:	
			stmt_list '\n'			{
										for (std::vector<float>::iterator it = $1.begin; it != $1.end(); ++it){
											printf("Result: %g\n", *p);
										}
									}
			| program stmt_list '\n'	{
										for (std::vector<float>::iterator it = $2.begin; it != $2.end(); ++it) {
											printf("Result: %g\n", *p);
										}
									}
			;

stmt_list:
			expr ';'				{
										$$ = {$1};
									}
			| stmt_list expr ';'	{
										$$ = $1;
										$$.push_back($2);
									}
			| error ';'				{
										$$ = {};	// Empty vector
									}
			| stmt_list error ';'	{ $$ = $1; }	// Do nothing 
			;

/*stmt:
			expr ';'			{ $$ = $1; }
			| error ';'
			;
*/
expr:
			INTEGER		{ $$ = $1; }
			| FLOAT			{ $$ = $1; }
			| expr '-' expr	{ $$ = $1 - $3; }
			| expr '+' expr { $$ = $1 + $3; }
			| expr '*' expr { $$ = $1 * $3; }
			| expr '/' expr { $$ = $1 / $3; }
			| '(' expr ')'	{ $$ = $2; }
			;

%%

void yyerror(const char* msg){
	fprintf(stderr, "ERROR: %s\n", msg);
}

void print(float *start, float *end){
	for (float* p = start; p < end; p++) {
		printf("Result: %g\n", *p);
	}
}

int main(void){
	// Explicitly disable lex tracing
	yy_flex_debug = 1;
	yydebug = 0;
	yyparse();
	return 0;
}

Output

1>------ Rebuild All started: Project: Calculator, Configuration: Debug Win32 ------
1>Build started 08/06/2021 20:50:49.
1>Target _PrepareForClean:
1>  Deleting file "Debug\Calculator.tlog\Calculator.lastbuildstate".
1>Target InitializeBuildStatus:
1>  Touching "Debug\Calculator.tlog\unsuccessfulbuild".
1>Target BisonTarget:
1>  Process "calculator.y" bison file
1>Target FlexTarget:
1>  Process "calculator.l" flex file
1>Target VcpkgTripletSelection:
1>  Using triplet "x86-windows" from "C:\Users\benja\vcpkg\vcpkg\scripts\buildsystems\msbuild\..\..\..\installed\x86-windows\"
1>Target ClCompile:
1>  calculator.flex.cpp
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(49,1): warning C4005: 'INT8_MIN': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(83): message : see previous definition of 'INT8_MIN'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(50,1): warning C4005: 'INT16_MIN': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(86): message : see previous definition of 'INT16_MIN'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(51,1): warning C4005: 'INT32_MIN': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(89): message : see previous definition of 'INT32_MIN'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(53,1): warning C4005: 'INT8_MAX': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(92): message : see previous definition of 'INT8_MAX'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(54,1): warning C4005: 'INT16_MAX': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(95): message : see previous definition of 'INT16_MAX'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(55,1): warning C4005: 'INT32_MAX': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(98): message : see previous definition of 'INT32_MAX'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(57,1): warning C4005: 'UINT8_MAX': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(101): message : see previous definition of 'UINT8_MAX'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(58,1): warning C4005: 'UINT16_MAX': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(104): message : see previous definition of 'UINT16_MAX'
1>  C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(59,1): warning C4005: 'UINT32_MAX': macro redefinition
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(107): message : see previous definition of 'UINT32_MAX'
1>  C:\repos\Calculator\Calculator\calculator.flex.cpp(368,10): fatal error C1083: Cannot open include file: 'FlexLexer.h': No such file or directory
1>  calculator.tab.cpp
1>  C:\repos\Calculator\Calculator\calculator.tab.h(368,27): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.h(371,27): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.h(528,1): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  C:\repos\Calculator\Calculator\calculator.tab.h(626): message : see reference to class template instantiation 'yy::parser::basic_symbol<Base>' being compiled
1>  C:\repos\Calculator\Calculator\calculator.tab.h(528,59): error C2143: syntax error: missing ',' before '&'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  C:\repos\Calculator\Calculator\calculator.tab.h(540,59): error C2143: syntax error: missing ',' before '&'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C2535: 'yy::parser::basic_symbol<Base>::basic_symbol(basic_symbol<Base>::Base::kind_type,const int)': member function already defined or declared
1>  C:\repos\Calculator\Calculator\calculator.tab.h(528): message : see declaration of 'yy::parser::basic_symbol<Base>::basic_symbol'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C2535: 'yy::parser::basic_symbol<yy::parser::by_kind>::basic_symbol(yy::parser::by_kind::kind_type,const int)': member function already defined or declared
1>  C:\repos\Calculator\Calculator\calculator.tab.h(528): message : see declaration of 'yy::parser::basic_symbol<yy::parser::by_kind>::basic_symbol'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(691,19): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  C:\repos\Calculator\Calculator\calculator.tab.h(691,39): error C2143: syntax error: missing ',' before '&'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(699,19): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  C:\repos\Calculator\Calculator\calculator.tab.h(699,39): error C2143: syntax error: missing ',' before '&'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(699,19): error C2535: 'yy::parser::symbol_type::symbol_type(int,const int)': member function already defined or declared
1>  C:\repos\Calculator\Calculator\calculator.tab.h(691): message : see declaration of 'yy::parser::symbol_type::symbol_type'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(808,31): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  C:\repos\Calculator\Calculator\calculator.tab.h(808,31): error C2143: syntax error: missing ',' before '&'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(823,29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  C:\repos\Calculator\Calculator\calculator.tab.h(823,29): error C2143: syntax error: missing ',' before '&'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C2535: 'yy::parser::basic_symbol<yy::parser::by_state>::basic_symbol(yy::parser::by_state::kind_type,const int)': member function already defined or declared
1>  C:\repos\Calculator\Calculator\calculator.tab.h(528): message : see declaration of 'yy::parser::basic_symbol<yy::parser::by_state>::basic_symbol'
1>  C:\repos\Calculator\Calculator\calculator.tab.h(530,3): error C3861: 'v': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(542,3): error C3861: 'v': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(582,33): error C3861: 'fval': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(586,33): error C3861: 'ival': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(692,40): error C2065: 'v': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.h(700,40): error C2065: 'v': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.h(810,45): error C2065: 'v': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.h(825,43): error C2065: 'v': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.h(1199,21): error C3861: 'fval': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(1203,21): error C3861: 'ival': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(1241,21): error C3861: 'fval': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.h(1245,21): error C3861: 'ival': identifier not found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(198,32): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(198,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(198,60): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(324): message : see declaration of 'yy::parser::semantic_type::copy'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(202,32): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(202,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(202,60): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(324): message : see declaration of 'yy::parser::semantic_type::copy'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(226,21): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(226,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(226,49): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(299): message : see declaration of 'yy::parser::semantic_type::move'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(230,21): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(230,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(230,49): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(299): message : see declaration of 'yy::parser::semantic_type::move'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(254,21): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(254,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(254,39): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(324): message : see declaration of 'yy::parser::semantic_type::copy'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(258,21): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(258,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(258,39): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(324): message : see declaration of 'yy::parser::semantic_type::copy'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(280,21): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(280,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(280,39): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(299): message : see declaration of 'yy::parser::semantic_type::move'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(284,21): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(284,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(284,39): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(299): message : see declaration of 'yy::parser::semantic_type::move'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(547,30): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(547,20): error C2672: 'yy::parser::semantic_type::emplace': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(547,38): error C2974: 'yy::parser::semantic_type::emplace': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(239): message : see declaration of 'yy::parser::semantic_type::emplace'
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(551,30): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(551,20): error C2672: 'yy::parser::semantic_type::emplace': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.tab.cpp(551,38): error C2974: 'yy::parser::semantic_type::emplace': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(239): message : see declaration of 'yy::parser::semantic_type::emplace'
1>  C:\repos\Calculator\Calculator\calculator.y(43,11): error C3867: 'std::vector<float,std::allocator<float>>::begin': non-standard syntax; use '&' to create a pointer to member
1>  C:\repos\Calculator\Calculator\calculator.y(44,36): error C2065: 'p': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(51,11): error C3867: 'std::vector<float,std::allocator<float>>::begin': non-standard syntax; use '&' to create a pointer to member
1>  C:\repos\Calculator\Calculator\calculator.y(52,36): error C2065: 'p': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(68,78): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(68,72): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(68,86): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(77,85): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(77,79): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(77,93): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(93,60): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(93,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(93,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(93,95): error C2065: 'ival': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(93,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(93,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(94,68): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(94,62): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(94,76): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(94,103): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(94,97): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(94,111): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(95,60): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(95,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(95,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(95,95): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(95,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(95,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(95,130): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(95,124): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(95,138): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(96,60): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(96,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(96,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(96,95): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(96,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(96,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(96,130): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(96,124): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(96,138): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(97,60): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(97,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(97,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(97,95): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(97,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>  C:\repos\Calculator\Calculator\calculator.y(97,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>  C:\repos\Calculator\Calculator\calculator.tab.h(274): message : see declaration of 'yy::parser::semantic_type::as'
1>  C:\repos\Calculator\Calculator\calculator.y(97,130): error C2065: 'fval': undeclared identifier
1>  C:\repos\Calculator\Calculator\calculator.y(97,135): fatal error C1003: error count exceeds 100; stopping compilation
1>  Generating Code...
1>Done building target "ClCompile" in project "Calculator.vcxproj" -- FAILED.
1>
1>Done building project "Calculator.vcxproj" -- FAILED.
1>
1>Build FAILED.
1>
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(49,1): warning C4005: 'INT8_MIN': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(50,1): warning C4005: 'INT16_MIN': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(51,1): warning C4005: 'INT32_MIN': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(53,1): warning C4005: 'INT8_MAX': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(54,1): warning C4005: 'INT16_MAX': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(55,1): warning C4005: 'INT32_MAX': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(57,1): warning C4005: 'UINT8_MAX': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(58,1): warning C4005: 'UINT16_MAX': macro redefinition
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\stdint.h(59,1): warning C4005: 'UINT32_MAX': macro redefinition
1>C:\repos\Calculator\Calculator\calculator.flex.cpp(368,10): fatal error C1083: Cannot open include file: 'FlexLexer.h': No such file or directory
1>C:\repos\Calculator\Calculator\calculator.tab.h(368,27): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.h(371,27): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.h(528,1): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\repos\Calculator\Calculator\calculator.tab.h(528,59): error C2143: syntax error: missing ',' before '&'
1>C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\repos\Calculator\Calculator\calculator.tab.h(540,59): error C2143: syntax error: missing ',' before '&'
1>C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C2535: 'yy::parser::basic_symbol<Base>::basic_symbol(basic_symbol<Base>::Base::kind_type,const int)': member function already defined or declared
1>C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C2535: 'yy::parser::basic_symbol<yy::parser::by_kind>::basic_symbol(yy::parser::by_kind::kind_type,const int)': member function already defined or declared
1>C:\repos\Calculator\Calculator\calculator.tab.h(691,19): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\repos\Calculator\Calculator\calculator.tab.h(691,39): error C2143: syntax error: missing ',' before '&'
1>C:\repos\Calculator\Calculator\calculator.tab.h(699,19): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\repos\Calculator\Calculator\calculator.tab.h(699,39): error C2143: syntax error: missing ',' before '&'
1>C:\repos\Calculator\Calculator\calculator.tab.h(699,19): error C2535: 'yy::parser::symbol_type::symbol_type(int,const int)': member function already defined or declared
1>C:\repos\Calculator\Calculator\calculator.tab.h(808,31): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\repos\Calculator\Calculator\calculator.tab.h(808,31): error C2143: syntax error: missing ',' before '&'
1>C:\repos\Calculator\Calculator\calculator.tab.h(823,29): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\repos\Calculator\Calculator\calculator.tab.h(823,29): error C2143: syntax error: missing ',' before '&'
1>C:\repos\Calculator\Calculator\calculator.tab.h(540,1): error C2535: 'yy::parser::basic_symbol<yy::parser::by_state>::basic_symbol(yy::parser::by_state::kind_type,const int)': member function already defined or declared
1>C:\repos\Calculator\Calculator\calculator.tab.h(530,3): error C3861: 'v': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(542,3): error C3861: 'v': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(582,33): error C3861: 'fval': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(586,33): error C3861: 'ival': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(692,40): error C2065: 'v': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.h(700,40): error C2065: 'v': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.h(810,45): error C2065: 'v': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.h(825,43): error C2065: 'v': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.h(1199,21): error C3861: 'fval': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(1203,21): error C3861: 'ival': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(1241,21): error C3861: 'fval': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.h(1245,21): error C3861: 'ival': identifier not found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(198,32): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(198,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(198,60): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(202,32): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(202,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(202,60): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(226,21): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(226,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(226,49): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(230,21): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(230,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(230,49): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(254,21): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(254,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(254,39): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(258,21): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(258,14): error C2672: 'yy::parser::semantic_type::copy': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(258,39): error C2974: 'yy::parser::semantic_type::copy': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(280,21): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(280,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(280,39): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(284,21): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(284,14): error C2672: 'yy::parser::semantic_type::move': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(284,39): error C2974: 'yy::parser::semantic_type::move': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(547,30): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(547,20): error C2672: 'yy::parser::semantic_type::emplace': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(547,38): error C2974: 'yy::parser::semantic_type::emplace': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(551,30): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(551,20): error C2672: 'yy::parser::semantic_type::emplace': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.tab.cpp(551,38): error C2974: 'yy::parser::semantic_type::emplace': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(43,11): error C3867: 'std::vector<float,std::allocator<float>>::begin': non-standard syntax; use '&' to create a pointer to member
1>C:\repos\Calculator\Calculator\calculator.y(44,36): error C2065: 'p': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(51,11): error C3867: 'std::vector<float,std::allocator<float>>::begin': non-standard syntax; use '&' to create a pointer to member
1>C:\repos\Calculator\Calculator\calculator.y(52,36): error C2065: 'p': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(68,78): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(68,72): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(68,86): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(77,85): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(77,79): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(77,93): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(93,60): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(93,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(93,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(93,95): error C2065: 'ival': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(93,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(93,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(94,68): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(94,62): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(94,76): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(94,103): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(94,97): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(94,111): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(95,60): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(95,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(95,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(95,95): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(95,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(95,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(95,130): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(95,124): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(95,138): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(96,60): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(96,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(96,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(96,95): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(96,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(96,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(96,130): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(96,124): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(96,138): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(97,60): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(97,54): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(97,68): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(97,95): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(97,89): error C2672: 'yy::parser::semantic_type::as': no matching overloaded function found
1>C:\repos\Calculator\Calculator\calculator.y(97,103): error C2974: 'yy::parser::semantic_type::as': invalid template argument for 'T', type expected
1>C:\repos\Calculator\Calculator\calculator.y(97,130): error C2065: 'fval': undeclared identifier
1>C:\repos\Calculator\Calculator\calculator.y(97,135): fatal error C1003: error count exceeds 100; stopping compilation
1>    9 Warning(s)
1>    109 Error(s)
1>
1>Time Elapsed 00:00:01.96
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

I'm unsure if I'm doing something wrong or if this is a bug, I tried to follow the bison manual as closely as possible.

re-add bison + flex tests

The first step would be to integrate the test suites back and everything that is necessary to execute them.
With bison this should be quite easy: just add the testsuite and a created atlocal script (with bison script incorporated if needed). Then all that is likely needed is a minimal MinGW/Cygwin installation + diff to execute it.

Flex seems to be a little bit more work as it doesn't use a autotest testsuite script but a self-made one based on automake. But this may also allow to run the tests with VS nmake (no unix shell interpreter needed).

With something important as the parser/tokenizer core of many systems I actually do wander why there are no tests (or did I missed something other that "the un-modified versions are tested already")...

Update bison to 3.6.4

Bison 3.6 announcement

  • the developer can forge syntax error messages the way she wants.
  • token string aliases can be internationalized, and UTF-8 sequences are properly preserved.
  • push parsers can ask at any moment for the list of "expected tokens", which can be used to provide syntax-driven autocompletion.
  • yylex may now tell the parser to enter error-recovery without issuing an error message (when the error was already reported by the scanner).

Git log and ftp shows that 3.6.4 is the current release.

restructuring the repo

Splitted from #14:

@GitMensch said:

  • Do we need to have the bin directory under version control (especially when we have the binaries in the releases, soon)?
  • Do we need to keep the two branches? I think moving the 2.x bison in to the main branch (adding a "new" VS/CMake entry and splitting chocolately into two directories) would be useful (there are actually minor differences in non-bison parts between those branches and it looks like you've did the changes in both (without merging the changes from master to branch).

@lexxmark said:

I agree. Just some notes:

  1. bin folder includes non binary stuff. May be we should move it to src/ subfolders and copy to output dir during building? So output dir will have executables and all needed stuff.
  2. I usually cherry-pick commits from master to bison2.7 I hope further upgrades m4 code won't break frozen bison2.7 code.

Additional question:

  • Are the current VS project files the ones generated by CMake?
  • I've spotted automatic ".l" to ".c" in the VS2017 solution - Did I missed it?

Suggested new layout:

  • no bin
  • bison2 - content of branch bison2.7
  • bison3 - moved from bison
  • chocolatey
    • bison2 --> content from bison2.7 branch, but download from GitHub Releases
    • bison3 --> content from master, but download from GitHub Releases
  • common - as is
  • custom_build_rules (moved from bin\Release)
    • doc (new folder with sources of #15)
    • win_bison_only
    • win_flex_only
  • flex - as is
    • src
    • FlexLexer.h (moved from bin\Release)
  • build (folders moved one level down but VS-subfolder win-bison renamed to win-bison3 [paths adjusted] and new win-bison2 [the solution will build both])
    • VS2010
    • VS2013
    • VS2015
    • VS2017
    • buildVS2015.bat
    • buildVS2017.bat
    • new: make_dist.bat
  • dist (git-ignored)

make_dist.bat will ask for VS version and bison version to use (can be toggled with TAB), copy the binaries from the VS version + data dir from appropriate bison + custom_build_rules + FlexLexer + docs to dist.

@lexxmark I assume you have questions, and answers :-)

Bison-3.7.2

GNU Bison NEWS

  • Noteworthy changes in release 3.7.2 (2020-09-05) [stable]

    This release of Bison fixes all known bugs reported for Bison in MITRE's
    Common Vulnerabilities and Exposures (CVE) system. These vulnerabilities
    are only about bison-the-program itself, not the generated code.

Would there be a win-bison update incorporating these changes any time soon?

Originally posted by @a11apurva in #58 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.