# [bnf.h] Type: BNF

## contents

#include "prs_dfn.h"

       [bnf] implements a more abstract interface to the more technical definition
       of a context free grammar, provided by the above parse module [prs].

## Types

BNF_BNF | Abstract BNF type
BNF_NTM | Abstract nonterminal type
BNF_TOK | Abstract token type
BNF_KEY | Abstract keyword type
BNF_PRD | Abstract production type
BNF_MBR | Abstract production symbol type

## Create & Delete

    BNF_BNF BNF_create(PLR_Tab PTab)

creates a BNF-view from the parse table 'PTab'

    void BNF_delBNF(BNF_BNF Bnf)

deletes BNF-view 'Bnf'

## Access to BNF-view

## Language and startsymbols

    c_string BNF_language(BNF_BNF Bnf)

Language name

    int BNF_startCnt(BNF_BNF Bnf)

Number of startsymbols

    BNF_NTM BNF_startNth(BNF_BNF Bnf, int Nth)

Nth startsymbol ( Nth >= 1 )

## Nonterminals

    int BNF_ntCnt(BNF_BNF Bnf)

Number of nonterminals

    BNF_NTM BNF_ntNth(BNF_BNF Bnf, int Nth)

Nth nonterminal ( Nth >= 1 )

    int BNF_ntIntern(BNF_BNF Bnf, BNF_NTM Nt)

Nonterminal to symbol id

    c_string BNF_ntName(BNF_BNF Bnf, BNF_NTM Nt)

Nonterminal to name

    BNF_NTM BNF_ntId(BNF_BNF Bnf, c_string NtName)

Name to nonterminal

    BNF_NTM BNF_internNt(BNF_BNF Bnf, int symbol)

Symbol id to nonterminal

## Productions

    int BNF_ntProdCnt(BNF_BNF Bnf, BNF_NTM Nt)

Number of productions

    BNF_PRD BNF_ntProdNth(BNF_BNF Bnf, BNF_NTM Nt, int Nth)

Nth production ( Nth >= 1 )

    int BNF_prodIntern(BNF_BNF Bnf, BNF_PRD Prd)

Production to id

    c_string BNF_prodName(BNF_BNF Bnf, BNF_PRD Prd)

Production to name

    BNF_PRD BNF_ntProdId(BNF_BNF Bnf, BNF_NTM Nt, c_string ProdName)

Name to production

    BNF_NTM BNF_prodNtId(BNF_BNF Bnf, BNF_PRD Prd)

Production nonterminal

    BNF_PRD BNF_internProd(BNF_BNF Bnf, int symbol)

Id to production

## Production symbols

    int BNF_prodMbrCnt(BNF_BNF Bnf, BNF_PRD Prd)

Number of production symbols

    BNF_MBR BNF_prodMbrNth(BNF_BNF Bnf, BNF_PRD Prd, int Nth)

Nth production symbol ( Nth >= 1 )

    c_bool BNF_isMbrNtm(BNF_BNF Bnf, BNF_MBR Mbr)

Production symbol is nonterminal ?

    c_bool BNF_isMbrTok(BNF_BNF Bnf, BNF_MBR Mbr)

Production symbol is token ?

    c_bool BNF_isMbrKey(BNF_BNF Bnf, BNF_MBR Mbr)

Production symbol is keyword ?

    BNF_NTM BNF_MbrNtm(BNF_BNF Bnf, BNF_MBR Mbr)

Production symbol to nonterminal

    BNF_TOK BNF_MbrTok(BNF_BNF Bnf, BNF_MBR Mbr)

Production symbol to token

    BNF_KEY BNF_MbrKey(BNF_BNF Bnf, BNF_MBR Mbr)

Production symbol to keyword

## Tokens

    int BNF_tokCnt(BNF_BNF Bnf)

Number of tokens

    BNF_TOK BNF_tokNth(BNF_BNF Bnf, int Nth)

Nth token ( Nth >= 1 )

    int BNF_tokIntern(BNF_BNF Bnf, BNF_TOK Tok)

Token to symbol id

    c_string BNF_tokName(BNF_BNF Bnf, BNF_TOK Tok)

Token to name

    BNF_TOK BNF_tokId(BNF_BNF Bnf, c_string TokName)

Name to token

    BNF_TOK BNF_internTok(BNF_BNF Bnf, int symbol)

Symbol id to token

## Keywords

    int BNF_keyCnt(BNF_BNF Bnf)

Number of keywords

    BNF_KEY BNF_keyNth(BNF_BNF Bnf, int Nth)

Nth keyword ( Nth >= 1 )

    int BNF_keyIntern(BNF_BNF Bnf, BNF_KEY Key)

Keyword to symbol id

    c_string BNF_keyName(BNF_BNF Bnf, BNF_KEY Key)

Keyword to name

    BNF_KEY BNF_keyId(BNF_BNF Bnf, c_string KeyName)

Name to keyword

    BNF_KEY BNF_internKey(BNF_BNF Bnf, int symbol)

Symbol id to keyword