BT_LANGUAGE(1) btparse BT_LANGUAGE(1) (NAME) bt_language - BibTeX btparse (SYNOPSIS) # Lexical grammar, mode 1: top-level AT \@ NEWLINE \n COMMENT \%~[\n]*\n WHITESPACE [\ \r\t]+ JUNK ~[\@\n\ \r\t]+ # Lexical grammar, mode 2: in-entry NEWLINE \n COMMENT \%~[\n]*\n WHITESPACE [\ \r\t]+ NUMBER [0-9]+ NAME [a-z0-9\!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+ LBRACE \{ RBRACE \} LPAREN \( RPAREN \) EQUALS = HASH \# COMMA , QUOTE \" # Lexical grammar, mode 3: strings # (very hairy -- see text) # Syntactic grammar: bibfile : ( entry )* entry : AT NAME body body : STRING # for comment entries | ENTRY_OPEN contents ENTRY_CLOSE contents : ( NAME | NUMBER ) COMMA fields # for regular entries | fields # for macro definition entries | value # for preamble entries fields : field { COMMA fields } | field : NAME EQUALS value value : simple_value ( HASH simple_value )* simple_value : STRING | NUMBER | NAME BibTeX . --- . ( Nelson Beebe "bibclean") . (regular) (context-free) . BibTeX LaTeX . (LEXICAL GRAMMAR) : top-level in-entry string. top-level "@" top-level in-entry "}" ")" top-level . """ "{" in-entry string . ( ) ( "{" ). . . top-level : AT \@ NEWLINE \n COMMENT \%~[\n]*\n WHITESPACE [\ \r\t]+ JUNK ~[\@\n\ \r\t]+ ( PCCTS regex . "~[...]" "[^...]".) "at" top-level in-entry . (junk) . (Junk << >> "bibtex" .) in-entry top-level . : NUMBER [0-9]+ NAME [a-z0-9\!\$\&\*\+\-\.\/\:\;\<\>\?\[\]\^\_\`\|]+ LBRACE \{ RBRACE \} LPAREN \( RPAREN \) EQUALS = HASH \# COMMA , QUOTE \" . ( "{" "(") . "{" "(" "at" "name" << >> (entry openers) "name" "comment" . ( top-level in-entry .) @comment string . "}" ")" << >> (entry closer) . ( .) "{" string . """ . ("name" "number" "equals" "hash" "comma") . "name" (entry types) (citation keys) BibTeX ( ) . BibTeX : " # % ' ( ) , = { } . . << >> . "@" BibTeX ( BibTeX ). TeX BibTeX TeX : ("\") ("~") . ( << (La)TeX BibTeX>> BibTeX btparse . .) btparse name : ! $ & * + - . / : ; < > ? [ ] ^ _ ` | << >> BibTeX ASCII (-) "@" "\" "~" . btparse BibTeX "\foo@bar" . btparse <> number . : BibTeX . ( BibTeX .) <> . "lbrace" "rbrace" "lparen" "rparen" . . ( @comment --- BibTeX .) ( carriage-return tab) . ( .) """ . ..SH " (SYNTACTIC GRAMMAR)" ( << - >> (EBNF) PCCTS . . "( foo )*" "foo" "{ foo }" "foo" .) : bibfile : ( entry )* (@) (<< >>) : entry : AT NAME body ( "comment" ) : body : STRING # for comment entries | ENTRY_OPEN contents ENTRY_CLOSE ("ENTRY_OPEN" "ENTRY_CLOSE" "{" "}" "(" ")".) "contents" . (metatype) ( ) . btparse : comment preamble macro definition regular. @comment @preamble "macro definition" @string "regular" . ( @modify @alias "modify" "alias" BibTeX 1.0 .) <<>> "regular" . "strcmp" . contents : ( NAME | NUMBER ) COMMA fields # for regular entries | fields # for macro definition entries | value # for preamble entries "NAME" "( NAME | NUMBER)" . BibTeX btparse "NUMBER" . "fields" : fields : field { COMMA fields } | "field" "field = value" : field : NAME EQUALS value "NAME" "name" << >> . "name" . ( BibTeX .) "value" '#' : value : simple_value ( HASH simple_value )* (simple value) ( ) : simple_value : STRING | NUMBER | NAME btparse (AUTHOR) Greg Ward btparse, version 0.91 2025-07-14 BT_LANGUAGE(1)