标签: bisonc++

忽略 flex 和 bison 中的空白

我正在尝试解析以下几行:

BEGIN WRAP WIO3     
    NAME                            lgCell_prg160_io
    CONDITION                       UNI_PLACE_GLOBAL && compBits
ENDS WIO3       
Run Code Online (Sandbox Code Playgroud)

我用来解析上面几行的语法正在解析直到UNI_PLACE_GLOBAL然后它给出解析错误。

请帮助我找出我所犯的错误。

我认为它不接受空格,所以我怎样才能允许解析这些行?

我已经做好了

莱克斯.l

%{
#include <iostream>
#include <stdio.h>
const char s[2] = " ";
#include "yacca.tab.h"
char *token;
#define YY_DECL extern "C" int yylex()
int line_num = 1;

#ifdef DEBUG
#define RETURN(x)       cerr << "\n--> found " << #x << "\n"; return x;
#else
#define RETURN(x)       return x;
#endif


using namespace std;
%}

DOT             "."
COLON           ":"
SEMICOLON       ";"
COMMA           ","
ANGLE_LEFT      "<"
ANGLE_RIGHT …
Run Code Online (Sandbox Code Playgroud)

space bison flex-lexer bisonc++

5
推荐指数
1
解决办法
6077
查看次数

使用 GDB 调试时如何知道 bison 中变量的值?

我正在尝试编写一个小型编译器,它可以解析我输入的一些命令。

我尝试解析的命令是:

create class something = create class do_something ; 
Run Code Online (Sandbox Code Playgroud)

我的代码将是这样的:

grammar : my_grammar
        {
            list<Class1 *> *obj = new list<Class1 *>;
            obj->push_back($1);
        }

my_grammar : my_definition SEMICOLON
           {
               report("something detected!");
               $$ = $1;
            }

my_definition : CREATE CLASS class_name EQU class_expression
               {
                   $5->setClassName(*$3);
                   $$ = $5;
                }

class_expression : CREATE CLASS operand_name
                 {
                     $$ = new OperandClass();
                     $$->setOperationType("createClass");
                     $$->setOperandName(*$3);
                  }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在其他地方调用解析器时,我无法获取Class之前定义的解析器。

我猜解析器肯定有问题,并用GDB做了一些调试。但我就是无法进入该功能push_back(),也无法正确打印信息obj

所以,我想知道是否有一种方法可以在使用 GDB 时获取$$or的值$1。只需输入p $$即可打印其他内容。

c++ gdb bison bisonc++

4
推荐指数
1
解决办法
1567
查看次数

标签 统计

bison ×2

bisonc++ ×2

c++ ×1

flex-lexer ×1

gdb ×1

space ×1