2015-12-06 2 views
0

Я работаю над грамматикой для очень простого языка программирования, и мне нужно написать его в форме (B) EE BNF. Я видел много примеров простых языков, где, например, допустимы только операции с номерами/идентификаторами или примерами большей сложности, например The Syntax of C in Backus-Naur Form.Простой язык программирования в форме EBNF

Что мне нужно (и да, я искал в Googled совсем немного) - это более простой пример, на который я могу взглянуть, чтобы понять общую иерархию. Что-то с объявлениями переменных, объявлениями функций, циклами, назначениями, операциями и т. Д., Но в гораздо меньшем и более простом масштабе, чем все C, написанные в BNF.

Я не прошу кого-то написать его здесь, так как это будет большая работа, но если кто-то может указать мне на ресурс, я был бы очень благодарен.

Я понимаю правила написания языка в BNF; Я просто не чувствую, что понимаю, с чего начать и как заказать язык.

+0

Что вы, кажется, просите, это рекомендация для ресурса вне сайта, что делает вопрос вне темы. Для некоторых более простых языков рассмотрим ['bc'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) и [' awk'] (http://pubs.opengroup.org/ onlinepubs/9699919799/утилиты/awk.html). Каждый имеет свои особенности, но они определенно проще, чем C лингвистически. Вы также можете рассмотреть возможность поиска BNF-грамматики Pascal - или, возможно, соответствующих языков, таких как Modula-N (для N в {1, 2, 3}) или Oberon, но не Ada. –

+0

Спасибо. Определение грамматики для bc было действительно полезно! – user3255596

+0

Oberon - это «Pascal developed», и славится своей кратностью синтаксиса. Вы можете увидеть полную, действующую грамматику Оберона: http://www.semanticdesigns.com/Products/DMS/DMSParsers.html –

ответ

0

(Кажется, вы, возможно, нашли то, что вы ищете, но вы - а также будущие читатель. - можете найти следующую полезную)

Книги 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 

Это очень маленький и очень легкий язык, чтобы написать интерпретатор против - вы не можете пойти меньше и более прагматичны относительно того, что вы хотите сделать. Я рекомендую и книгу, и упражнения, которые она содержит.

Смежные вопросы