首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bisonc++ -没有生产规则?

bisonc++ -没有生产规则?
EN

Stack Overflow用户
提问于 2016-11-10 12:36:19
回答 2查看 575关注 0票数 0

我正在尝试用bisonc++编译以下内容:

代码语言:javascript
复制
%baseclass-preinclude <iostream>
%lsp-needed

%token NUMBER COMMENT KEYWORD VARIABLE LOGICAND LOGICOR LOGICEQUALS DOUBLELESSER
%token DOUBLEGREATER MOD LESSER GREATER OPEN CLOSE NEGATE CURLYOPEN CURLYCLOSE SEMICOLON

%left EQUALS
%left PLUS MINUS
%left TIMES
%left DIVISION

%%

start:
    expressions
    {
        std::cout << "start -> expressions" << std::endl;
    }
;

expressions:
    // empty
    {
        std::cout << "expressions -> epsylon" << std::endl;
    }
|
    exp expressions
    {
        std::cout << "expressions -> exp expressions" << std::endl;
    }
;

exp:
    NUMBER
    {
        std::cout << "exp -> NUMBER" << std::endl;
    }
|
    COMMENT
    {
        std::cout << "exp -> COMMENT" << std::endl;
    }
|
    exp LOGICAND exp
    {
        std::cout << "exp -> exp LOGICAND exp" << std::endl;
    }
|
    exp LOGICOR exp
    {
        std::cout << "exp -> exp LOGICOR exp" << std::endl;
    }
|
    exp LOGICEQUALS exp
    {
        std::cout << "exp -> exp LOGICEQUALS exp" << std::endl;
    }
|
    exp DOUBLELESSER exp
    {
        std::cout << "exp -> exp DOUBLELESSER exp" << std::endl;
    }
|    
    exp DOUBLEGREATER exp
    {
        std::cout << "exp -> exp DOUBLEGREATER exp" << std::endl;
    }
|
    exp PLUS exp
    {
        std::cout << "exp -> exp PLUS exp" << std::endl;
    }
|
    exp MINUS exp
    {
        std::cout << "exp -> exp MINUS exp" << std::endl;
    }
|
    exp TIMES exp
    {
        std::cout << "exp -> exp EQUAL exp" << std::endl;
    }
|
    exp EQUAL exp
    {
        std::cout << "exp -> exp EQUAL exp" << std::endl;
    }
|
    exp DIVISION exp
    {
        std::cout << "exp -> exp DIVISION exp" << std::endl;
    }
|
    exp MOD exp
    {
        std::cout << "exp -> exp MOD exp" << std::endl;
    }
|
    exp LESSER exp
    {
        std::cout << "exp -> exp LESSER exp" << std::endl;
    }
|    
    exp GREATER exp
    {
        std::cout << "exp -> exp GREATER exp" << std::endl;
    }
|
    OPEN exp CLOSE
    {
        std::cout << "exp -> OPEN exp CLOSE" << std::endl;
    }
|
    NEGATE exp
    {
        std::cout << "exp -> NEGATE exp" << std::endl;
    }
|
    CURLYOPEN exp CURLYCLOSE
    {
        std::cout << "exp -> CURLYOPEN exp CURLYCLOSE" << std::endl;
    }
|
    exp SEMICOLON
    {
        std::cout << "exp -> SEMICOLON" << std::endl;
    }
|
    KEYWORD VARIABLE SEMICOLON
    {
        std::cout << "exp -> KEYWORD VARIABLE SEMICOLON" << std::endl;
    }
;

但是,它继续返回错误。

代码语言:javascript
复制
') encountered.1] Line 1: unrecognized input (`
': identifier or character-constant expected.
[bead.y: fatal] Line 23: No production rules
134950080

我显然有一些生产规则,不知道我做错了什么。我从另一个工作示例中复制了大部分代码,并根据我的喜好对其进行了修改。怎么啦?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-27 19:08:22

如果您在Windows上操作并使用Nodepad++,则您的文件不符合UNIX标准(Compuate.l和Compuate.y),只需执行以下操作:

  1. 编辑/EOL转换/UNIX格式
  2. 在没有BOM的情况下将文件编码/转换为UTF-8
  3. 使用flex和bisonc++保存并重新编译

希望这能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2016-11-15 13:51:12

我也遇到了同样的问题,我的老师告诉我,一些窗口编辑器在你的文件中创建了看不见的垃圾,所以用终端编辑你的文件。

  • 你的档案
  • 在第一行之前点击一个回车,而不是擦除它。
  • 保存

就这样!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40527803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档