2011-08-05 19 views
0

これまでのところ、私は'<'のようなものしか見ていませんが、'abc'も​​もyaccファイルで見ることはできません。yaccで二重引用符の文字列を使用できますか?

a: 
    b '<' c; 

後で2つは有効ですか?

+0

です。かなり曖昧です。親切に精緻化してみませんか? –

答えて

1

このコンパイラ/プリプロセッサのようにcharを指定するたびに は最後の文字を単に削除するため、ANSI C.Ifのコンパイル時エラー "コンパイル時エラー"が発生することがあります。あなたのコンパイラによって与えられていない場合は、 'abc'から最後の 'c'が削除されているはずです。

ので char ch='abc' ; // is actually equi. to ch = 'ab'

が、それは唯一の「ABC」のsyntaxically正しいが、symantically間違っcharacherである理由です、ch='a'を使用します。(私はCだって書いた結合。我々はYACCをコンパイルするためのC89ツールつまりPOSIX Cを使用しながらlex入力)

yylex()は文字列ではなく、文字列(二重引用符で囲まれたもの)として機能します。したがって、 "abc"はyylex()の 入力と一致する偶数文字ではない有効な文字ではありません。 (にyylex()トークン 試験の文字列を受け付ける。"10+20" は文法[[:DIGIT:]]+ [-+*/%] [[:DIGIT:]]+
を有するトークン1,0,+,2,0
を有するLEXは、W/O指定文法デフォルトで識別することができるトークンはCHARおよび 20のように数 +として 10であります番号を再度 ので、それは前に指定された文法と一致します)

あなたも ^["I am"]よう 01「私は」で始まる入力行との一致を意味し、とのマッチングのための規則セクション内の文字列を指定することができますは、文字列が"I am"のみの入力と一致します。一致する文字は"I am Swapnil @ [email protected]"

関連する問題