EBNF形式的简单编程语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EBNF形式的简单编程语言相关的知识,希望对你有一定的参考价值。

我正在研究一种非常简单的编程语言的语法,我需要用(E)BNF形式编写它。我已经看过许多简单语言的例子,例如,只允许对数字/标识符进行操作,或者使用The Syntax of C in Backus-Naur Form等更大复杂性的例子。

我需要什么(是的,我用Googled搜索了很多)是一个更简单的例子,我可以看看,以便我可以理解一般的层次结构。具有变量声明,函数声明,循环,赋值,操作等的东西,但是比BNF中编写的所有C都小得多且简单得多。

我不是要求有人在这里写一个,因为这将是一项大工作,但如果有人能指出我的资源,那么我将非常感激。

我理解在BNF写一种语言的规则;我只是觉得我不知道从哪里开始以及如何订购语言。

答案

(看起来你可能找到了你想要的东西,但是你 - 以及未来的读者 - 可能会发现以下内容很有用。)

来自哥本哈根大学的TorbenÆgidiusMorgensen所着的书Basics of Compiler Design包含了一种非常简单的语言,用于实现编译器和解释器。它的BNF如下:

Program --> Funs

Funs --> Fun
Funs --> Fun Funs

Fun --> TypeId ( TypeIds ) = Exp

TypeId --> *int* **id**
TypeId --> *bool* **id**

TypeIds --> TypeId
TypeIds --> TypeId , TypeIds

Exp --> num
Exp --> id
Exp --> Exp + Exp
Exp --> Exp = Exp
Exp --> if Exp then Exp else Exp
Exp --> id ( Exps ) 
Exp --> let id = Exp in Exp

Exps --> Exp 
Exps --> Exp , Exps

编写翻译是一种非常小而且非常容易的语言 - 对于你想做的事情,你不能变得更小,更务实。我推荐这本书以及它包含的练习。

以上是关于EBNF形式的简单编程语言的主要内容,如果未能解决你的问题,请参考以下文章

使用Scala基于词法单元的解析器定制EBNF范式文法解析

在Haskell赋值中为实现语言实现解析器时,无法解析'\'

你可能不知道的JavaScript代码片段和技巧(下)

你可能不知道的JavaScript代码片段和技巧(上)

Cg入门16:Fragment shader - 片段级光照

golang代码片段(摘抄)