-1

$display私が望むのは、パーサーである種の構文を完全に無視することです。だから私はこの質問をして、どちらが問題ないかを解析できるif(1) $display("Hello");ようif(1) ;にしました。しかし、なししか$display("Hello");ないif(1)場合、私のパーサーは単一;の を生成しますsyntax error。誰でもこれで私を助けることができますか?ありがたいです。


現在変更中のパーサーは解析$displayされません。表示されますsyntax error。そして、私の目的は本当に単純です$display("Hello");。他の構文に影響を与えずに無視する最も簡単な方法を使用してください。そして、状況は次のようになります。

always @(*)
begin
if(1) $display("Hello");
end

$display("Hello");として扱う場合;、上記のコードは次のように解析されます。

always @(*)
begin
if(1) ;
end

パーサーには問題ありませんが、次のようなコードがある場合:

always @(*)
begin
$display("Hello");
end

次のように解析されます。

always @(*)
begin
;
end

これは大丈夫ではありません。だから私はここで立ち往生しています。助けてください。

4

1 に答える 1

1

したがって、あなたの .y と .lex を知らなくても、ルールを追加して食い尽くすだけです

$display (...);

多分好き

display0 = Dollardisplay Leftbracket parameterlist Rightbracket {/* ignore it */}
display : display0 | display0 Semi 

そしてdisplay、文法の適切な場所にこの -ruleを挿入します

つまり、ルールにはオプションで末尾を含める;ことができます。もちろん、これによってあいまいさを導入し、競合を減らすことができます。または、ステートメントに関するルールをリファクタリングし、空のステートメント (単一の;) を許可します。しかし、文法と字句解析器があれば、答えるのが本当に簡単になります...

于 2013-02-01T20:56:13.390 に答える