jison

    0熱度

    1回答

    我已經和Flex或Bison一起工作了很長一段時間,重返大學。不過,我一直在試圖用Jison來打造我自己的light-BBCode解析器,作爲週末的嘗試。 我的問題涉及到一個奇怪的問題:在我告訴解析器尋找它一直沒有找到的前提令牌的令牌。我不認爲我解釋說,以及(或者說,我明白所發生的情況),所以這裏的代碼: %lex %% \s+ /* Consume whitespace */ "[b

    0熱度

    1回答

    我正在寫一個簡單的Jison語法,以便在開始一個更復雜的項目之前獲得一些經驗。我嘗試了一個簡單的語法,它是逗號分隔的數字範圍列表,其中範圍的起始和結束值相同,以便使用單個數字簡寫。然而,當在一些測試輸入上運行生成的解析器時,我會得到一個錯誤,這對我來說很有意義。這裏是我想出了語法: /* description: Parses end executes mathematical expressio

    2熱度

    2回答

    我正在嘗試使用Jison。 這裏是我的語法: var grammar = { lex:{ rules:[ ["\\s+", ""], ["then", "return 'newline';"], ["goto", "return 'goto';"], ["http[^\\s]*", "return 'url';"],

    2熱度

    1回答

    我正在尋找爲現有語言創建JavaScript解析器,該解析器目前具有笨拙的「手工製造」C#和Java解析器。我想使用Jison,並一直在努力學習Bison的基礎知識。 一個問題我不知道如何回答Bison/Jison的輸出究竟是什麼?我是否自動獲取任何東西(如AST)?或者是所有事情都是使用編寫野牛文件的人的規則行爲完成的。例如,如果我有一個規則指定一個符合規則的新變量分配: 變量陳述 :VAR V

    3熱度

    2回答

    我想通過Jison爲語言ChucK在JavaScript中生成一個解析器,並且已經有了一個良好的開端,除了在生成的解析器無法處理的語言中存在歧義之外。最初的ChucK編譯器由Bison生成,並且必須以某種方式解決這些歧義。 爲了這個問題的目的,我已經簡化了問題到一個解釋的語法,其中只給出了一個含糊之處。作爲參考,我已經把所有相關文件(包括生成的parser)的gist。項目結構如下: langua

    4熱度

    1回答

    以下代碼片段位於:http://zaach.github.io/jison/demos/calc/以及jison文檔頁面。在閱讀jison,lex和flex文檔之後 - 我仍然不完全瞭解%lex和/ lex語法。是否特定於jison掃描儀發生器?含義是它提供稍後在文檔中顯示的json輸出的唯一函數?我只問,因爲jison文檔沒有明確解釋它的用途,而flex/lex規則似乎不允許這樣的語法。 /*

    0熱度

    1回答

    我正在使用jison文件並使用python PLY的lex模塊將其轉換爲解析器生成器。 我注意到在這個jison文件中,某些標記有多個與它們相關的規則。例如,對於令牌CONTENT,該文件規定了以下三個規則: [^\x00]*?/("{{") { if(yytext.slice(-2) === "\\\\") { strip(0,1);

    1熱度

    1回答

    因此,我爲搜索查詢語言創建了一個.jison文件,該語言基本上是SQL where語句的子集。這個文件可以在這裏看到: https://gist.github.com/ryanzec/7d1c8100d1b5f03c0a17 現在的作品,因爲我期望它一個字符串轉換成JSON對象時。現在我已經閱讀了文檔,並且找不到任何內容,但是可以將輸出的JSON對象輕鬆地編譯回字符串,還是必須手動編寫該過程?

    1熱度

    1回答

    我寫類似的JavaScript其分號插入前語言解析器: var x = 1 + 2; x; 和 var x = 1 + 2 x 甚至 var x = 1 + 2 x 是相同。 現在,我的詞法分析器僅在與分號不同的令牌出現後才匹配換行符(\ n)。這對1和2這樣的基本情況起到很好的作用,但我如何處理第三種情況?即在表達中間發生的新行。我無法每次都匹配新行,因爲它會污染我的解析器

    0熱度

    1回答

    我在想如何獲得語法中令牌的行號。假設我有以下語法: S : expr MINUS expr { $$ = $1 -$3; } ; 如何獲取MINUS令牌的行號? 我不使用內jison詞法分析器,而是通過重寫詞法分析器從法文件傳遞: parser.lexer = { lex: function() { var token = "MINUS"; parser