を得ていないこれは私のレモンパーサー文法であるレモン+ re2cの正しいルールの解像度
%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);
をパーサーにトークンを渡すために使用するコードです。誰かが私を正しい方向に向けることができますか?
結果を説明するための十分な情報がありません。特に、表示されているプログラム(ここではカンマはどこから来たものですか)によって出力が生成されないためです。どんな答えもちょうど推測だろう。 [mcve]を作成してください。* minimal * – rici
@riciが更新されました。 –