【发布时间】:2016-04-05 06:33:50
【问题描述】:
这是我的柠檬解析器语法
%nonassoc IMPLICATION.
%nonassoc PERIOD.
%nonassoc NEWLINE.
%nonassoc END.
%nonassoc STRING.
program ::= in END.
in ::= .
in ::= in rule NEWLINE.
in ::= in rule.
rule ::= STRING(A) IMPLICATION STRING(B) PERIOD. {cout<<A->token<<endl; cout<<B->token<<endl;}
我的输入字符串是
p<-body1.
q<-body3.
我希望输出是
p
body1
q
body3
但是我得到的输出是
q
q
\n (Empty line here)
\n (Empty line here)
我确定我以正确的顺序传递令牌,并且我已经验证了这一点,因为解析器会在输入错误时抛出语法/解析器错误。
这是我用来将令牌传递给解析器的代码
do
{
token = lexer.scan(); // returns an int with the type of token
Token* t = new Token(lexer.getTokenValue().c_str());
lpmlnParse(pParser, token, t);
}while(token != PARSE_TOKEN_END);
我不知道出了什么问题。有人可以指出我正确的方向。
【问题讨论】:
-
没有足够的信息来解释结果,特别是因为所显示的程序无法产生声称的输出(例如,逗号来自哪里)。任何答案都只是猜测。请创建一个minimal reproducible example——记下minimal这个词