2017-05-03 9 views
0

私はBNF文法を使って文を生成するプログラムを書いています。それでは、私は文法ファイルのためにこれを持っていたとしましょう: エスケープシーケンスを使って新しい行を印刷する方法

<s>::=<np> <vp> 
<np>::=<dp> <adjp> <n>|<pn> 
<dp>::=the|a  
<adjp>::=<adj>|<adj> <adjp> 
<adj>::=big|fat|green|wonderful|faulty|subliminal|pretentious 
<n>::=dog|cat|man|university|father|mother|child|television 
<pn>::=John|Jane|Sally|Spot|Fred|Elmo 
<vp>::=<tv> <np>|<iv> 
<tv>::=hit|honored|kissed|helped 
<iv>::=died|collapsed|laughed|wept 
と私はランダムな文を印刷し、それを聞いて、それはに移動し、オプションを選択し、のは言わせて、その後、それがジョンを選択しますと言うでしょう。それから私たちはターミナルを打ってから行ってきます。それに行くと笑って選択してください。私たちはジョンが笑った文を得るでしょう。

私がしたいことは、pを追加することです。意味段落。段落のための私の式は

<p>::=<s> \n <s> | <p> 

の線に沿って何かだろうと私は、\ nは改行として表示されることを望むが、代わりに私のプログラムは、\ nとしての代わりとしてそれを治療するためのターミナルでそれを印刷しますエスケープシーケンス!私のプログラムがしていることは、各トークンを取り込んでそれを文字列に変換することです。ターミナルであれば\ nです。なぜそれは働いていないのですか? 注:私のプログラムの実装の詳細を表示することはできません。

答えて

0

私がchar []配列としてBNFラインに読み込むための私のプログラムを変更することができます使用することができます。これにより、エスケープシーケンスを解釈することができます。次に、char配列を文字列に変換して出力することができます。私はこれが同様の問題を抱えている人に役立つことを願っています。

0
<new_line> ::= '\x0A' 

次に、あなたはそれが

+0

私のプログラムではまだ\ x0Aとして出力されます。私のプログラムでは、この文字列を他の文字列と連結する必要がありますが、それは問題と関係していますか? – Meepo

+0

@ヤクナスはしないでください。 \ x0A、 '\ n'、 '\ x0A'を試してください – Alagunto

+0

ああ、私のプログラムはそれをcharとして読まなければなりません。それが問題です。なぜそれが動作していないのだろうか、とにかくこの周りにはありますか?私のプログラムがそれを文字列として読み込んでいるので、 '\ x0A'として出力されます。トークンベースの処理のように考えてください。 – Meepo

関連する問題