繁体   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