peg

    1熱度

    1回答

    所有替代模式 我想用PEG.js在幾個不同的格式識別數字: number = integer /real /(integer/real) '^' (integer/real) /(integer/real) '^^' (integer/real) real = [0-9]+ '.' [0-9]* /[0-9]* '.' [0-9]+ integer = [0-9]+ PEG.j

    3熱度

    2回答

    我想寫一個老虎分析器。我最初使用PyPEG,但由於一些困難,我去了琶音。 我的語法很簡單。 def number(): return _(r'[0-9]+') def string(): return _(r"\".*?\"") def id(): return _(r'[a-zA-Z][a-zA-Z0-9_]*') def literal(): return [number, strin

    0熱度

    1回答

    使用PEG解析SAN格式移動的正確語法是什麼? 的解決方案,我想出是 MOVE <- [NBRQK]? [a-h]? [1-8]? [-x]? [a-h] [1-8] [NBRQ]? 然而,這似乎是錯誤的,因爲它不解析NH4因爲小時第一個可選的文件[A-H]匹配?解析器不會回溯。 應正確解析其他動作是: A4,A3A4,XA4,a8Q,xa8Q,NH 4,Nxh4,Ngxh4,Ng3h4,Ng

    1熱度

    1回答

    我試圖在最後用分號捕捉到一些文本。 (。*) 例:(in here there can be 'anything' !"#¤);); any character is possible); 我已經試過這 Text = "(" text:(.*) ");" { return text.join(""); } 但似乎將包括最後一個);之前「);」我得到的錯誤: Expected ");" or

    3熱度

    1回答

    這是一個演示代碼 label: var id let id = 10 goto label 如果允許關鍵字作爲標識符將 let: var var let var = 10 goto let 這是完全合法的代碼。但是在antlr中這樣做很難。 AFAIK,如果antlr匹配令牌讓,永遠不會退回到id令牌。所以ANTLR會看到 LET_TOKEN : VAR_TOKEN <mis

    2熱度

    1回答

    我想深層嵌套Python布爾表達式的PEG語法示例。 PEG語法不能「非常遞歸」,否則會導致堆棧溢出。支持'|','&','('和')'需要。輸入的 例如:(a = 1 | B = 1 | C = 1 | d = 1個& E = 2)&(F = 2 & G = 2 & H = 2 | I = 3 | J = 3 | k = 3)

    0熱度

    2回答

    我輸入的是一個遞歸結構如下(注意空白二號線): XXX @ {} YYY @ {ZZZ @ {} WWWW}   語法,因爲我看到,會讀它應該是這樣的: start = item+ item = thing/space thing = '@{' item* '}' space = (!'@' .)+ 但我得到的是 第2行第1列:期望的「@ {」,「}」或任何字符,但除了輸入的結尾。 我在

    2熱度

    1回答

    我正在使用grako(一種用於python的PEG解析器生成器庫)來解析文檔可以包含一個或多個協議的簡單聲明性語言。 我本來寫成文檔根規則: document = {protocol}+ ; 這適當返回協議的列表,但只給出了有益的錯誤,如果語法錯誤是在第一個協議。否則,它默默地放棄無效協議及其後的所有內容。 我也試了一些變化: document = protocol document | $ ;

    3熱度

    1回答

    我使用parsimonious做一些解析方案,我有麻煩搞清楚如何正確地解析共享的第一個字符的無序客場選擇: 例如: 文字: 2 > 3 2 >= 3 語法: expr = ~"[0-9]+" space operator space ~"[0-9]+" operator = ">"/"=="/"<"/">="/"<=" space = ~"[\\s]*" 文本的第一行將正確解析,但第

    0熱度

    1回答

    我使用的吝嗇(蟒蛇PEG解析器庫),以解析文本看起來像這樣的打印用的錯誤消息序列模塊: text = """ block block_name_0 { foo } block block_name_1 { bar } """ 它是一個簡單的身體需要一系列塊(必須是字母)組成整個文本。這裏的語法: grammar = Grammar(r""" file =