0

我正在尝试在虚拟词法分析器和解析器上运行 Flex 和 Bisonc++。这是 Flex 从中生成正确lex.yy.cc文件的词法分析器:

%option noyywrap c++ yylineno

%{
#include "Parserbase.h"
%}

LETTER          [a-zA-Z]
NUMBER          [0-9]
WHITESPACE      [ \t\n]

%%
"which"                     { return Parser::WHICH; }
"file"                      { return Parser::SOURCEFILE; }
"commit"                    { return Parser::COMMIT; }
"dev"                       { return Parser::DEV; }
"team"                      { return Parser::TEAM; }
("_"|{LETTER})("_"|{LETTER}|{NUMBER})*          { return Parser::IDENTIFIER; }
","                     { return Parser::COMMA; }
";"                                             { return Parser::SEMICOLON; }


{WHITESPACE}+                                   // Skip.

%%

这是我的虚拟句法分析器:

%baseclass-preinclude <iostream>

%token IDENTIFIER SEMICOLON COMMA WHICH SOURCEFILE TEAM DEV COMMIT

%%

start:
    WHICH returnList SEMICOLON { std::cout << ("Processing symbols.") << std::endl; }
;

returnList:
    fileUnit
|
    devUnit
|
    teamUnit
|
    commitUnit
;

fileUnit:
    SOURCEFILE
|
    SOURCEFILE COMMA returnList
;

devUnit:
    DEV
|
    DEV COMMA returnList
;

teamUnit:
    TEAM
|
    TEAM COMMA returnList
;

commitUnit:
    COMMIT
|
    COMMIT COMMA returnList
;

Bisonc++——它应该——生成一个Parserbase.h, Parser.h, Parser.ih, 和parse.cc文件。但是,Parser.ih其中包含以下方法:

inline int Parser::lex()
{
    return d_scanner.lex();
}

我在 Bisonc++ 的文档中读到,如果提供了该方法,则会生成此方法--scanner=<pathname>,尽管我在没有它的情况下运行 Bisonc++。生成的文件不包含d_scanner对象。当我尝试编译生成的 *.cc 文件时,出现以下错误:

error: ‘d_scanner’ was not declared in this scope

我的问题是,我该怎么做才能使 Bisonc++ 跳过此方法的生成,或者以不同的方式生成它?

4

0 回答 0