bison

    0熱度

    1回答

    我試圖用flex和野牛,使一個小的編譯器,但我沒有得到如何給行動爲每個規則 我的語法是這樣的: %union{ std::string *s; }; %start program %type <s> expr %token <s> KEYWORD %token <s> VARIABLE %% program : KEYWORD {std::cout <

    0熱度

    1回答

    我試圖在從flex發送的野牛中打印令牌值,但由於某些原因,在某些情況下打印的值是垃圾。 法代碼: \".*\" { std::string* s1 = new std::string(yytext); std::string s2 = *s1; std::string s3 = s2.substr(1,s2.size() - 2); yylval.s = &s3;

    0熱度

    1回答

    我想明白爲什麼野牛以下規則 stmt: declaration { ... } | assignment { ... } | exp { ... } | ID ';' <-- this rule { ... fprintf(stderr, "\n my id is '%s'", $1);

    0熱度

    1回答

    我正在尋找c語法,發現這個鏈接https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#cast-expression問題是有語法的c和lex代碼,但我沒有看到任何語義像加法,乘法實現我知道yacc只用於語法檢查,但我們也可以在其中寫入語義,其中實現的語義是在其他工具中實現的。 我想實現一個小型編譯器,我在哪裏寫語義,是否好在yacc中使用函數編寫它們。

    -1熱度

    1回答

    我正在嘗試爲我自己的迷你語言構建一個解析器,然後由YACC自己將它翻譯成C++。 問題是,YACC正在讀取輸入的第一行以及輸入的第二行中的第一個標記,並將其與相應的規則進行匹配,而它應該只讀取第一行輸入中的標記以及與相應的規則匹配它 我的輸入文件是: print "hello" a = 10 print a 萊克斯文件: %{ #include <stdio.h> #i

    0熱度

    1回答

    我想解析這段代碼,它是用我想要的語法編寫的,而且我每次都得到語法錯誤。我檢查了我的代碼超過10次,我無法找到解決方案。 PARSER和LEXER代碼分別由bison和jflex生成,因爲它們很長,我不得不提到一個鏈接到我的github。 這是我簡單的一段代碼,但是當我運行該程序時,它給了我語法錯誤。 program firstProgram main { } 感謝您幫助我解決這個問題。

    0熱度

    1回答

    問題的一部分:這個問題的 expr_var: var_or_ID | expr_var '[' expr ']' | NEW expr_var '(' expr_listE ')' | expr_var '(' expr_listE ')' | expr_var ARROW expr_var | expr_var ARROW '{' expr_var '}' | expr_var DC

    0熱度

    1回答

    我在修復語法中的移位減少衝突時遇到問題。我嘗試添加-v來讀取問題的輸出,它引導我進入狀態0,並提到我的INT和FLOAT被規則9簡化爲variable_definitions。我看不到衝突,並且無法找到解決方案。 %{ #include <stdio.h> #include <stdlib.h> %} %token INT FLOAT %token ADDOP MULOP INCOP

    -1熱度

    1回答

    我正在寫一個flex/bison程序,我面臨着很多錯誤。即使我認爲可能很容易理解這些錯誤,我也沒有在網上找到任何關於這些錯誤的答案。 這裏是我的代碼法: %{ #include "my_type.hpp" #include "bison.tab.h" %} /* ... */ %% {int} { yylval.val=strdup(yytext); return(

    0熱度

    2回答

    這裏是簡化yaac文件: %token CONTEXT_ // the corresponding string is "context" %token CONTEXTREF_ //"contextref" %token IS_ //"is" %token ID_L //"id_l" %token ID_L1 //"id_l1" %token LIB_ %start desi