第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ANTLR 訪問者單元測試在一條規(guī)則上成功,但在另一條規(guī)則上失敗

ANTLR 訪問者單元測試在一條規(guī)則上成功,但在另一條規(guī)則上失敗

C#
DIEA 2023-09-24 15:53:04
我正在嘗試為我的 ANTLR 解析器定義單元測試。單元測試成功提取第一個 expr 的值,但未能提取第一個 idEscape 的值。這表明我誤解了解析器工作方式或訪問者工作方式的核心內(nèi)容。我正在編寫一個用于 FileMaker Pro 中計算的解析器。在 FileMaker 中,標(biāo)識符包含空格以及運算符和其他字符在技術(shù)上是有效的,否則這些字符在計算引擎中具有功能用途。在這些情況下,標(biāo)識符通過用“${”和“}”包圍來進行轉(zhuǎn)義。雖然解析器成功將“${abcdef + 123}”識別為有效表達式,但我仍然需要能夠?qū)ⅰ癮bcdef + 123”識別為有效標(biāo)識符。當(dāng)我在第二個單元測試中請求第一個 idEscape 的值時,我得到一個空字符串。如果相關(guān),我正在使用 ANTLR4.Runtime.Standard。我究竟做錯了什么?任何有助于解決我的誤解的幫助將不勝感激。謝謝。語法grammar FileMakerCalc;  // PARSER RULEScalculation :   expr;expr        :   idEscExpr;idEscExpr   :   LEFTESCAPE idEscape RIGHTESCAPE;idEscape    :   (WORD|WS|OPERATOR|INT|FLOAT)*?;// LEXER RULESfragment LOWERCASE  : [a-z] ;fragment UPPERCASE  : [A-Z] ;LEFTESCAPE  :   '${';RIGHTESCAPE :   '}';OPERATOR    :   ('+'|'-'|'*'|'/'|'&'|'^'|'='|'≠'|'<>'|'>'|'<'|'≤'|'<='|'≥'|'>=' );WORD        :   (LOWERCASE | UPPERCASE)+ ;FLOAT       :   [0-9]+ '.' [0-9]+;INT         :   [0-9]+ ;NEWLINE     :   [\r\n]+ ;WS          :   [ \t];游客public class FileMakerCalcVisitor : FileMakerCalcBaseVisitor<String>{    public override string VisitExpr(FileMakerCalcParser.ExprContext context)    {        return context.GetText();    }    public override string VisitIdEscape(FileMakerCalcParser.IdEscapeContext context)    {        return context.GetText();    }}單元測試namespace Antler_Tests{    [TestFixture()]    public class ParserTest    {        private FileMakerCalcParser Setup(string text)        {            AntlrInputStream inputStream = new AntlrInputStream(text);            FileMakerCalcLexer lexer = new FileMakerCalcLexer(inputStream);            CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);            FileMakerCalcParser parser = new FileMakerCalcParser(commonTokenStream);            return parser;        }
查看完整描述

1 回答

?
ibeautiful

TA貢獻1993條經(jīng)驗 獲得超6個贊

${abcdef + 123}不是有效的idEscape,因為它以 開頭${并以 結(jié)尾,而規(guī)則均不接受}這兩者。idEscape您定義它的方式idEscape僅匹配 和 之間的內(nèi)容${},idEscapeExpr即匹配整個內(nèi)容的內(nèi)容。

因此,您將希望您的測試調(diào)用idEscapeExpr規(guī)則而不是idEscape或更改您正在解析的字符串abcdef + 123(或為每個字符串進行一個測試)。


查看完整回答
反對 回復(fù) 2023-09-24
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號