lemon

    0熱度

    1回答

    下面是一個語法寫的檸檬解析器生成器: %left PostDecrementation. %right PreDecrementation. program ::= expression. expression ::= Terminal. expression ::= unaryoperation. unaryoperation ::= Decrementation expressio

    0熱度

    1回答

    衝突。當我試圖編譯使用檸檬,我遇到衝突這個簡單的解析器,但我不能看到哪個規則是錯誤的。如果我刪除二進制表達式或callexpression,則衝突消失。 %left Add. program ::= expression. expression ::= binaryexpression. expression ::= callexpression. binaryexpression

    5熱度

    1回答

    我遇到了一個簡單的語法問題,我創建它來支持函數調用。 我正在使用Greg的基於檸檬的PHP_ParserGenerator。 這是語法的相關部分: program ::= expr(A). { $this->result = A; } value(A) ::= SIMPLE_STRING(B). { A = B; } value(A) ::= NUMBER(B).

    0熱度

    2回答

    我有一個語法,基本上是這樣的: start ::= groups. groups ::= groups group. groups ::= group. group(A) ::= IDENTIFIER identparams CURLY_OPEN assignments CURLY_CLOSE SEMICOLON. group(A) ::= IDENTIFIER CURLY_OPEN as

    2熱度

    1回答

    我試圖學習flex和檸檬,以解析(中等)複雜的文件格式。到目前爲止,我有我的語法和lex文件,我相信它正確解析示例文件。現在,我想將使用flex掃描的標記文本傳遞給檸檬。 柔性YYSTYPE被定義爲 #define YYSTYPE char* 檸檬令牌類型是 %token_type {char *} 然而,如果我在檸檬的一組規則: start ::= MATDEF IDENTIFIER(m

    5熱度

    2回答

    當語法錯誤發生時,是否有已知方法生成「預期代幣」列表?我使用檸檬作爲解析器生成器。

    2熱度

    1回答

    許多編程語言的語句都以行尾結尾。但是,通常情況下,如果語法分析器無法理解該行,則在語句中間允許使用行尾;例如, a = 3 + 4 ...將在Ruby和Python *被解析爲聲明a = 3+4,因爲a = 3+沒有任何意義。換句話說,換行符會被忽略,因爲它會導致解析錯誤。 我的問題是:我如何簡單/優雅地使用標記器和解析器完成相同的行爲?我使用Lemon作爲解析器生成器,如果它有所作爲(儘管

    3熱度

    2回答

    我正在開發一個領域特定的語言。部分語言完全像C表達式解析語義,如精度和符號。 我正在使用檸檬分析器。我遇到了一個同樣的問題,用於兩種不同的事情,我無法分辨詞法分析器中的差異。 &符號(&)符號用於「按位」和「地址」。 起初我認爲這是一個微不足道的問題,直到我意識到它們沒有相同的關聯性。 我該如何給出兩個不同的關聯性?我應該只使用AMP(如&符號),並使地址和位和規則使用AMP,或者我應該使用不同的

    0熱度

    2回答

    我傳遞給檸檬的所有令牌都是附有行號信息的結構。 看那syntax_error定義如下 %name SinkParser %token_prefix SINKPARSER_TOKEN_ %token_type {SinkParserNode*} %extra_argument { SinkParserContext *parser_context } %syntax_error {

    2熱度

    2回答

    我想讓我的檸檬解析器驅動的應用程序中的數學變量。例如,如果用戶輸入x^2 + y,那麼我希望能夠對x和y的100000個不同對值進行評估,希望不必每次重新分析。我能想到的唯一方法就是讓解析器生成一個對象樹,然後在給定輸入時評估表達式。有更好/更簡單/更快的方法嗎? 表現可能是一個問題。但我也關心編碼和代碼維護的簡易性。