2016-11-10 9 views
0

私はbisonC++で以下をコンパイルしようとしている:bisonC++ - 生産ルールはありませんか?

%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; 
    } 
; 

はしかし、それは誤り

') encountered.1] Line 1: unrecognized input (` 
': identifier or character-constant expected. 
[bead.y: fatal] Line 23: No production rules 
134950080 

に戻って続けて、私は明らかにいくつかのプロダクションルールを持っていると私はやっている見当がつかない違う。私は別の実際の例からコードの大部分をコピーし、それを好みに変更しました。なにが問題ですか?

答えて

0

あなたのファイルは、UNIXは、(calculate.lとcalculate.yを) 準拠していないとあなたがNodepad ++を使用して、ちょうど次の操作を行います。

  1. 編集/ EOL変換/ UNIXフォーマット
  2. エンコーディング/
  3. 保存BOMなしUTF-8にファイルを変換し、Flexで再コンパイルし、bisonC++

希望はこれが

を支援
0

私は同じ問題を抱えていましたが、先生が私に教えてくれたのは、ウィンドウエディタの中には目に見えないゴミ箱を作成していたからです。それを消すよりも

  • yourfile.y

    • ピコは、最初の行の前に入力しますヒット。
    • 保存

    それはそれです! Windows上で動作している場合は

  • +0

    はい私はそれも最後に理解しました。 Notepad ++にはUNIXタイプの改行文字に切り替えるオプションがあり、それが私を助けました。 :) –

    関連する問題