BNF的BNF是什么?即我们如何定义BNF元语法



我正在尝试定义BNF的BNF。换句话说,我试图定义BNF的元语法。也就是说,一个BNF语法,它本身就是一个实例,可以生成任何其他BNF语法。

任何提示/提示/片段都将不胜感激!

谢谢!

这里有一个:

bnf = rules ;
rules = rule ;
rules = rules rule ;
rule = lefthandside EQUAL righthandside SEMICOLON  ;
lefthandside = IDENTIFIER ;
righthandside = ;
righthandside = righthandside token ;
token = IDENTIFIER ;
token = QUOTEDLITERAL ;

这使得IDENTIFIER、QUOTEDLITERAL、EQUAL和SEMICOLON未定义,在假设BNF是在langauge令牌上定义的。

您可以在字符上定义BNF。只需添加:

EQUAL = '=' ;
SEMICOLON = ';' ;
IDENTIFIER = letter ;
IDENTIFIER = IDENTIFIER letterordigit ;
letterordigit = letter ;
letterordigit = digit ;
letter = 'A' ;
...
letter = 'Z' ;
digit = '0' ;
...
digit = '9' ;

留给读者练习:添加选择(|)、多重规则和kleene星,使其成为EBNF的BNF;这个答案显然在处理空格方面很狡猾,但你可以通过在允许空格的地方插入一个"空格"非词尾来处理这个问题(恶心但有效)。有一些BNF规范系统,你实际上是在字符上写语法的,这种隐含的空白非终结符插入是为你完成的(例如,Stratego的"语法定义形式主义")。

如果你想在BNF上一堂关于BNF的令人震惊的课,你应该阅读这篇论文/做一个名为"MetaII"的BNF处理系统的教程。本文介绍了如何在BNF中进行BNF,以及如何构建两个编译器,共10页。

(这里有一个重要的教训:阅读60年代和70年代的所有计算机科学材料。没有那么多,你会惊讶于有这么多好的材料)。

<line> ::= '<' <word> '>' '::=' <definition>
<definition> ::= <word> '|' | '' <definition> | ''
程序设计语言的自定义

通过使用元循环解释器,给出了一个编程语言的操作自定义的例子。

Tymoczko,Thomas。"哥德尔与数学中的意义概念"Synthese,第114卷,第1期,1998年,第25-40页

王(1980)报道,哥德尔说所有的逻辑都可以从概念的概念开始定义。CoC是自我定义的。CoC是一个由它自己定义的对象。

一段合乎逻辑的旅程。从哥德尔到哲学王带我们走进哥德尔的思想。哥德尔将概念的概念描述为逻辑的基础。(第8章,第247页)从1953年到1959年初,他在卡纳普论文上花费了大量精力,试图证明数学不是语言的语法,并支持某种形式的柏拉图主义

编程语言语法(编程语言系列)1977年1月1日包含第33页BNF的BNF。

最新更新