2017-02-12 13 views
1

字句解析の識別子の状態図を見てみましょう。基本的には、アナライザーが数字の文字以外の文字を読み取るときはいつも、トークンを(識別子、属性)と戻します。文字列dtf56 * f %% fを読んでいる間、この規則に従って、 のトークンは次のように生成されますか?字句解析の混乱

dtf56:識別子

F:識別子

F:私が思う何識別子

が、これは単一の文字列であるため、字句解析が、この場合にはエラーをスローしなければならないことです。一般的な質問として、「他の」文字はどの字句を返すべきですか?

State diagram for identifiers

+0

アスタリスクとパーセント記号が合法な文字の場合は、別々に返します。あなたの最初の文章のポイントは、それまでに累積されたトークンを分析して、それに参加できない文字が出てきたときにそれを返すということです。しかし、それを引用することなく未知の状態図について話すことにはあまり意味がありません。 – EJP

+0

私の悪いです。私は今、状態図を追加しました。 –

+0

私が混乱しているのは、いつ字句を返すべきかです。たとえば、文字列56fdtの場合、整数として56を返し、識別子としてfdtを返しますか?あるいは、私はエラーを投げるべきですか? –

答えて

3

アスタリスクとパーセント記号であれば、それは別に、あまりにもそれらを返すべき法律上の文字です。あなたの最初の文章のポイントは、それまでに累積されたトークンを分析して、それに参加できない文字が出てきたときにそれを返すということです。

私が混乱しているのは、字句を返すべきときです。たとえば、文字列56fdtの場合、整数として56を返し、識別子としてfdtを返しますか?あるいは、私はエラーを投げるべきですか?

あなたの州の図によると、あなたはそれを別々に返すべきです。識別子は文字で始まるだけです。それが記法の意味です。

スキャンする言語のアルファベットに含まれていない文字に遭遇し、実際にはflex(1)などのツールを使用すると、実際にはパーザのエラーリカバリルールを有効にするために、それらをパーサーにも返します(yacc(1)と友人と仮定します)。

したがって、ボトムラインは疑問なく状態遷移図に従うことですか? (私はこの質問をしながらナックルヘッドのように感じる)。

ステートダイアグラムでは、ステート9の文字を見つけてステート10に移行し、文字または数字が多いうちにそのステータスに留まると、蓄積されたトークンをIDとして出力します。あなたが分析している言語に合っているかどうかは疑問の余地なく、確実に状態図に従ってください。 [56fdtが正当な識別子である言語がありますが、その場合は状態図が異なる、非常に異なる]