0

GOLD パーサー Web サイトで提供されている ANSI-C 文法をテストしようとしています。最小の C ファイルを完全に解析することすらできないようです。

例:

int test_inc1(void)
{
  int t;
  t = 2 + 2;
  return 0;
}

タイプとして int を検出し、次に Id として test_inc1 を検出し、正しく括弧を付けますが、2 番目の ) の後には ; が必要です。{の代わりに。そのため、構文エラーがスローされます。私はこの文法のファンキーさにはまったく慣れていません。コードをASTに解析したいだけです:(

4

1 に答える 1

1

文法によると、最初の行が<Func Proto>セミコロンで終了している場合は、次のようになります。

<Func Proto> ::= <Func ID> '(' <Types>  ')' ';'
               | <Func ID> '(' <Params> ')' ';'
               | <Func ID> '(' ')' ';'

関数宣言を解析するために、引用された文法からのこの生成は、括弧の間の部分と一致している必要があります。

<Param>      ::= const <Type> ID
               |       <Type> ID

voidは大丈夫でした<Type>ID、文法が求めるものはありません。

ただし、文法には次のヒントも含まれています。

! Note: This is an ad hoc version of the language. If there are any flaws, 
! please visit the contact page and tell me.

ですから、それはおそらくあまり真剣に受け止められるべきではありません。

于 2011-10-18T21:08:06.323 に答える