https://github.com/jonathan-beard/simple_wc_example
simple word count example using flex/bison parser
https://github.com/jonathan-beard/simple_wc_example
bison c-plus-plus count flex parse tutorial
Last synced: about 1 month ago
JSON representation
simple word count example using flex/bison parser
- Host: GitHub
- URL: https://github.com/jonathan-beard/simple_wc_example
- Owner: jonathan-beard
- License: apache-2.0
- Created: 2012-12-12T16:13:52.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2023-11-23T03:11:17.000Z (over 1 year ago)
- Last Synced: 2025-03-30T22:12:58.094Z (2 months ago)
- Topics: bison, c-plus-plus, count, flex, parse, tutorial
- Language: C++
- Size: 243 KB
- Stars: 140
- Watchers: 8
- Forks: 43
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### Simple Word Count Parser Example
=================### Build Status
Tested on linux and OS X[](https://travis-ci.org/jonathan-beard/simple_wc_example)
### About
So this is a super simple parser example. The tutorial is located here:
linkBetween the tutorial and the code you should be able to get started with more
advanced projects using C++ and Flex/Bison. Admittedly the example itself is a
bit contrived, however it's mean to be simple and get the point across. If
there are changes in Flex/Bison that prevent the example from compiling or if
you just have improvements, feel free to generate a pull request or just shoot
me an e-mail.To compile just download and run make, there's a super simple test harness to
make sure it runs in the test dir.Or you use CMake.
mkdir build/
cmake ..
makeor with clang
mkdir build/
CC=clang CXX=clang++ cmake ..
makeor with clang with optimisations
mkdir build/
CC=clang CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Release
makeTo run the simple test after make call
ctest
## NOTES
* **OS X Users** I've heard of some issues compiling if you've installed
command line tools, then XCode.app afterwards on Catalina (with bash). When compiling with
```clang++```, the C++ header files aren't found. If you have this issue, exporting an environment
variable, such as this,
```export CXX=/usr/bin/clang++```, seems to be a workaround. If anybody has a better
solution (aside from wiping out all build tools and reinstalling) please let
me know.
* **OS X Users** If you have this message when compiling on OS X (likely Catalina and later),
```bash
mc_lexer.yy.cc:675:8: error: member reference type 'std::istream *' (aka 'basic_istream *') is a
pointer; did you mean to use '->'?
```
Then this means that you've a broken cpp path. To see why this is, go to the command line, type
```bash
cpp -xc++ -v < /dev/null
```
to see your path included by clang. The key problem is the lack of a modern FlexLexer.h in the
command line tools of OS X, which is compouned when you install a new verson of Flex and the
header isn't in the path. So, your binary will be the right one, the headers the wrong ones.
As an example, the header file we want on my install of OS X (fresh VM install), is in
```
/System/Volumes/Data/usr/local/Cellar/flex/2.6.4_1/include/FlexLexer.h
```
which is installed by _home brew_. Unfortunately, the default include path pulls in the system
default version at
```
/System/Volumes/Data/Library/Developer/CommandLineTools/usr/include/FlexLexer.h
```
**HOW TO FIX**1. Interestingly there's yet another version in ```/Library/Developer```. So how do you fix?
The simplest way if you have sudo access, do:
```
sudo -s
ln -s /FlexLexer.h
```
As an example, here's my path:
```
ln -s /System/Volumes/Data/usr/local/Cellar/flex/2.6.4_1/include/FlexLexer.h
```
2. Second, **best** way for non-root is to set the _CPLUS\_INCLUDE\_PATH_ like this
```
CPLUS_INCLUDE_PATH=/System/Volumes/Data/usr/local/Cellar/flex/2.6.4_1/include/:$CPLUS_INCLUDE_PATH
```
using my path above.* **Bison Version** - updated the latest head to test with Bison vs. 3.5, there were a few minor
changes in syntax, now reflected in the example code. Will no longer work with Bison vs. < 3.3,
see notes from [link](https://lwn.net/Articles/777594/).Thanks!