lexer

    5熱度

    1回答

    我使用ANTLR版本4來創建編譯器。第一階段是Lexer部分。我創建了「CompilerLexer.g4」文件,並在其中放置了詞法分析器規則。它工作正常。 CompilerLexer.g4: lexer grammar CompilerLexer; INT : 'int' ; //1 FLOAT : 'float' ; //2 BEGIN : 'begin' ; //3 END

    0熱度

    2回答

    我有以下問題: 我的ANTLR 3語法編譯,但我簡單的測試程序不起作用。語法如下: 語法Rietse; options { k=1; language=Java; output=AST; } tokens { COLON = ':' ; SEMICOLON = ';' ; OPAREN = '(' ; CPARE

    1熱度

    1回答

    我使用re2c 0.10.5,我無法正確匹配字符串的開頭。 例如,我定義: [aA] w "=" { return ATTRKEYWORD;} [bB] w "=" { return BWKEYWORD;} 其中w定義爲: w = s*; ,但如果我的字符串 b=my string a=foobar 我去拿ATTRKEYWORD當我不應該,因爲它是從b =開始的,我想要得

    0熱度

    1回答

    我已經lexer grammar稱爲BasicTokens其設置爲我的語言基本令牌,令牌有像null,true,false等 現在,當我創建解析器語法說BasicGrammar其中進口是指BasicTokens和另一個叫語法其中InheritedGrammar進口BasicGrammar。 當Antlr4爲InheritedGrammar生成解析器時,它包含了所有已在BasicGrammar中定義

    0熱度

    2回答

    我目前正在學習基於解析一個簡單的計算lexing和解析(基於F#工具集),我卡在我的詞法分析器沒有前進消耗整個字符串: let lexeme = LexBuffer<_>.LexemeString // ... rule test = parse | digit+ { Console.WriteLine("1_" + (lexeme lexbuf)); test lexbuf; }

    1熱度

    1回答

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

    0熱度

    1回答

    如何使用C++輕鬆標記文檔或字符串? 我對Python中的ply.lex模塊很熟悉,但是我找不到任何C++。有沒有一個C++庫可以使用lex和yacc?還是有另一個更好的圖書館或輕鬆做到這一點?

    0熱度

    2回答

    出於某種原因,野牛拒絕了一個特定的規則,notequal_expression,要小心我剛剛開始學習整個概念,所以我的思路不那麼成熟,輸入文件:(錯誤是:「 string.y包含1個沒用的非終結和1無用規則「) /* Parser for StringC */ %{ /* -----------------------------------------------------------

    1熱度

    1回答

    你好,我試圖建立一個簡單的詞法分析器來標記行以';'開頭,字符。 這是我的詞法語法: lexer grammar TestLex; options { language = Java; filter = true; } @header { package com.ualberta.slmyers.cmput415.assign1; } IR :

    1熱度

    1回答

    下面的我的詞法分析器代碼會在它應該隱藏它們的位置生成「SKIP」和「NEWLINE」值。有人能告訴我我該怎麼做才能隱藏它們嗎? ​​ 我想從上面的詞法分析器導入令牌生成點語法抽象語法樹。但不需要的SKIP和NEWLINE令牌造成了麻煩。 下面是一個例子輸入: digraph G { main [shape=box]; } 它產生的輸出: NEWLINE digraph SKIP ID SKIP