2012-05-04 8 views
0

、私は、このようなparse.yという名前のファイルに}%%%%type%tokenなどの前に任意のCコードで見たことがない新しいキーワードとsyntaxsに気づいた:Cで使用されるキーワード '%type'と '%token'は何ですか?私は<a href="http://openntpd.org/" rel="nofollow">OpenNTPD</a>ソースコードファイルを掘り下げるたが

%{ 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 

... 

%} 

%token LISTEN ON 
%token SERVER SERVERS SENSOR CORRECTION RTABLE REFID WEIGHT 
%token ERROR 
%token <v.string>  STRING 
%token <v.number> 

.... 

grammar  : /* empty */ 
     | grammar '\n' 
     | grammar main '\n' 
     | grammar error '\n'  { file->errors++; } 
     ; 

main  : LISTEN ON address listen_opts { 
      struct listen_addr *la; 
      struct ntp_addr  *h, *next; 

      if ($3->a) 
... 

ファイルの内容のほとんどは、これらのキーワードを除く通常のC構文を持ちます。誰かがこれらのキーワードが何で、何が使われているかを知っていますか?

+1

これは[Yacc](http://dinosaur.compilertools.net/)のパーサー定義です。 –

答えて

3

これはYaccコード(つまり、grammarの定義)であり、プレーンCではないと思います。これはBNFと同様の表記です。

+1

もちろん、Yaccはある意味ではCのスーパーセットです(少なくとも、通常は有効なCコードが多く含まれています)。 –

0

そして、あなたは*.lファイルを見れば、あなたもなど、Cコードの多くを見る%%と混合し、%x%s%optionかもしれませんそして、それは多くの場合、YACC *.yファイルが添付された字句解析入力ファイル、です。

関連する問題