簡體   English   中英

如何在JFlex中引用.bnf解析器的屬性?

[英]How to reference attribute from .bnf parser in JFlex?

我正在使用.bnf解析器來檢測特定表達式,我正在使用JFlex來檢測這些表達式的不同部分。 我的問題是,其中一些表達式可能包含嵌套表達式,我不知道如何處理它。

我試圖通過使用%include在我的JFlex中包含.bnf解析器,然后使用PARAMETERS = ("'"[:jletter:] [:jletterdigit:]*"'") | expression引用相對宏中的表達式。 PARAMETERS = ("'"[:jletter:] [:jletterdigit:]*"'") | expression 由於JFlex報告.bnf格式錯誤,因此失敗。

JFlex的片段:


%{
  public Lexer() {
    this((java.io.Reader)null);
  }
%}

%public
%class Lexer
%implements FlexLexer
%function advance
%type IElementType
%include filename.bnf
%unicode

PARAMETERS= ("'"[:jletter:] [:jletterdigit:]*"'") | <a new expression element>

%%

<YYINITIAL> {PARAMETERS}   {return BAD_CHARACTER;} some random return

.bnf解析器的片段:

{
//list of classes used.
}
expression ::= (<expression definition>)

任何投入將不勝感激。 謝謝。

我找到了解決問題的方法。 更進一步,問題出在我的語法文件和我的flex文件中。 為了解決這個問題,我在語法文件中遞歸調用表達式,如下所示: expression = (start value expression? end)

通過JFlex,我宣布了許多狀態,直到我找到了一種鏈接在一起的方式和無窮無盡的表達方式。 看起來有點像這樣:

%state = WAITING_EXPRESSION

<WAITING_NEXT> "<something which indicates start of nested expression>"   { yybegin(WAITING_EXPRESSION); return EXPRESSION_START; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM