bison

%union directive in Bison

Hello, I was trying to use an abstract syntax tree in a bison parser, so I tried to use %union directive. Grammar file looks like this: %{ #include "compiler.h" #include "ast.h" #include "common.h" static bool verbose = true; extern "C" { int cyylex(void); void cyyerror(const char *s); } %} %union { ast_node *node; ...

Statement with no effect warning with GCC and Flex/Bison

When compiling my project with gcc and the -Wall option, I get a warning about a statement with no effect in the non-existant last line of my flex file: Warning: gcc -Wall -O0 -ggdb3 -DNOSUDO -DJOBC -DDEBUG -c lex.yy.c tokenizer.l: In function ‘yylex’: tokenizer.l:179: warning: statement with no effect Shell Command: $ wc -l tokeniz...

Using bison to parse list of elements

Hello, I'm writing a compiler for a shading engine and every worked fine until I reached the statements parsing part. I used an abstract syntax tree defined with classes to do all the work (to simplify typechecking and intermediate code generation).. so I have an ancestor class ASTNode and all descending classes like ASTFloat, ASTExpres...

Deriving a state machine from a BNF grammar

I am trying to put together a proof of concept of an XSS-safe string interpolation scheme. Given a string with substitutions, "Hello <b>$planetoid</b>!" I want break it into literal portions and substitutions ("Hello<b>" planetoid "</b>!") and then run a state machine left to right over the literal portions. When I reach an interpol...

Writing compilers ... what's right and what's wrong?

Okay, in my quest to figure out the necessary stuff to write a compiler, I've reached a bit of a roadblock. It seems that every technology or tool that I find has some opposition somewhere. I use Bison and Flex right now but I'm getting the feeling that this method is outdated. Is this true? Is this a good forward-compatible way to p...

Using make to generate bison grammar

In a project that uses make and bison, I'm having difficulty specifying that the compiled grammar grammar.tab.c depends on the grammar input grammar.y, that each object file depends on a corresponding source file (including grammar.tab.o), and that the executable depends on all object files. The problem is that running make when grammar...

Left Recursion in Grammar Results in Conflicts

Throughout a Bison grammar I am using right recursion, and I have read that left recursion is better because it doesn't have to build the whole stack first. However, when I try to switch to left recursion on any of them, I always end up with a lot of conflicts, and I am not seeing why. Can anyone show me a generic example of where usin...

Inspect Bison's $$ variable with GDB

If I set a breakpoint in a Bison .y file, is there a way I can inspect the contents of $$ pseudo variable at that breakpoint? ...

Selective merge of two or more data files

Dear Overflowns: I have an executable whose input is contained in an ASCII file with format: $ GENERAL INPUTS $ PARAM1 = 123.456 PARAM2=456,789,101112 PARAM3(1)=123,456,789 PARAM4 = 1234,5678,91011E2 PARAM5(1,2)='STRING','STRING2' $ NEW INSTANCE NEW(1)=.TRUE. PAR1=123 [More data here] $ NEW INSTANCE NEW(2)=.TRUE. [etcetera] In ...

flex, defining char

Hello I want to define char (ie 'a AND 'a') but I am having issues in checking errors. Here how I write the rule and check: char " ' " {letter} code {char} { int x =input() ; //printf("%d",'a'); if(x == 10) { return(tCharunterm); } ...

Bison/Yacc, make literal token return its own value?

Below is my rule, when i replace $2 with '=' my code works. I know by default all literal tokens uses their ascii value (hence why multi character token require a definition) The below doesnt work. The function is called with 0 instead of '=' like i expect. is there an option i can set? (It doesn't appear so via man pages) AssignExpr: ...

Search string parser in C/C++

I work on an open source project focused around Biblical texts. I would like to create a standard string format to build up a search string. I would then need to parse the search string and run the search with the options given. There are a number of different options, from scope of the search, to searching multiple texts, to wildcards, ...

Why does my flex/yacc compiler not compile correctly on another linux machine

On my machine (Windows running cygwin) it compiles correctly. Flex is version 2.5.35 and bison is version 2.3 On linux machine 1 it compiles correctly. Flex is version 2.5.4 and bison is version 1.875c. On linux machine 2 it does not compile correctly. Flex is version 2.5.4 and bison is 2.3. One would expect by looking at the flex/...

bison end of file

If i forget to put an empty line at the end of any of my files my program gets a syntax error. The problem is my grammar expects a newline to end the current line. Since a newline doesnt exist bison generates a syntax error bc it does not finish the rule. How do i solve this? I tried making <> return MY_EOF BUT when i do that lex crashe...

How to resolve this Shift/Reduce conflict in YACC

I have a grammar like this: "Match one or more rule1 where rule1 is one or more rule2, where rule2 is one or more rule3, etc. etc. each seperated by newlines". Look at the following example. start: rule1_list ; rule1_list: rule1 | rule1_list NEWLINE rule1 ; rule1: rule2 | rule2 NEWLINE rule3...

bison shift instead of reduce. With reduce/reduce errors

In my language i can write a = 1 b = 2 if true { } else { } if true { } **Here is the problem** else {} My grammer doesnt support newlines between statements. An else can only be used with an if. When i add optionalNL in my rule IfExpr: IF rval optionalNL codeBlock optionalNL ELSE codeBlock | IF rval optionalNL codeBlock The opt...

Is it possible to stack Yacc grammar rule code?

Lets say I need to run some initialization code everytime I match a rule how can I reduce the redundancy? rule : TOKEN1 { init(); token1Code(); } | TOKEN2 { init(); token2Code(); } ; Also is it possible to do something like rule : TOKEN1 | TOKEN2 { codeForToken1OrToken2(); } ; ...

bison YYSTYPE: Trying to use char*

I'm taking a class and trying to do some homework. I need to use flex and bison to parse some code. The default type of YYSTYPE is int, even though I never declared it that way. Is that a default from bison? It would help me a lot to pass strings back. I read this: http://stackoverflow.com/questions/1014619/how-to-solve-bison-warnin...

Tips on Using Bison --graph=[file] on Linux

Recently (about a month ago) I was trying to introduce new constructs to my company's in-house extension language, and struggling with a couple of reduce-reduce errors. While I eventually solved this problem, digging into the y.output file was no picnic. As an experiment, I tried using Bison's --graph=<file> option to output a DOT file ...

Good Bison Books Recommendation

Hello, I'm now going to do the things right, now I'm going to learn how to develop a compiled language using Bison by books, then I want some books recommendations(better if I can have they for Kindle). ...