0

当我深入研究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 语法。有人知道这些关键字是什么以及它们的用途吗?

4

2 回答 2

3

我的猜测是这是Yacc代码(即语法的定义),而不是纯 C。这是类似于BNF的符号。

于 2012-05-04T13:00:07.497 回答
0

如果你看*.l文件,你可能还会看到很多 C 代码,混合着%%, %x,%s%option。然后是词法分析器输入文件,通常伴随着一个 yacc*.y文件。

于 2012-05-04T13:30:56.633 回答