当我深入研究OpenNTPD源代码文件时,我注意到了以前在任何 C 代码中从未见过的新关键字和语法,例如}%
, %%
,%type
和%token
一个名为parse.y的文件:
%{
#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 语法。有人知道这些关键字是什么以及它们的用途吗?