**زبان برنامه‌نویسی فلوچارت** (اف سی ال) یک زبان امری ساده است که با اهداف توضیح جنبه‌های اساسی آنالیز برنامه و بخصوص ارزیابی جزئی طراحی شد. این زبان اولین بار در سال ۱۹۸۹ توسط کارستن کی گومارد و نیل دی جوینز  ارائه شد. بعدها در سال ۱۹۹۳ در کتاب پیتر سیستافت و در سال ۱۹۹۸ در سخنرانی‌های جان هات کلیف دوباره مطرح شد. در زیر توضیحاتی دربارهٔ اف سی ال که در بخش‌هایی از سخنرانی جان هات کلیف آمده‌است را مطرح می کنیم.

اف سی ال یک زبان برنامه‌نویسی امری نزدیک به معماری کامپیوترهای فون نیومن است. در یک برنامه دستورها به صورت متوالی اجرا می‌شوند و تا زمانی ادامه می یابند که تعریف شده باشند مثل حافظهٔ سراسری.اف سی ال مفهوم روال را ندارد اما پرش‌های شرطی و غیر شرطی را پشتیبانی می‌کند.یک برنامهٔ اف سی ال انتزاعی است که یک فلوچارت را به آسانی واقعیت می بخشد.

یک برنامهٔ اف سی ال دنباله‌ای از مقدارهای نام‌گذاری شده را به عنوان پارامتر ورودی دریافت می‌کند و یک مقدار را به عنوان نتیجه تولید می‌کند.

سینتکس
------

سینتکس ما به فرم بکوس-نائور است.

یک برنامهٔ اف سی ال لیستی از تعریف پارامترها،لیبل‌های ورودی و دنباله‌ای از بلاک‌ها است:

```
<p> ::= "(" <xs> ")" "(" <l> ")" <b> <bs>
<xs> ::= <x> <xs> | ""
<bs> ::= <b> <bs> | ""

```

اولاً، این زبان فقط اعداد صحیح غیر منفی را پشتیبانی می‌کند.

یک بلاک ساده شامل لیبل،لیستی از انتساب‌ها و یک پرش است.

```
<b> ::= <l> ":" <as> <j>
<as> ::= <a> <as> | ""

```

یک انتساب، یک متغیر را به یک عبارت منتسب می‌کند. یک عبارت می‌تواند مقدار ثابت یا متغیر یا ترکیبی از عملگرها باشد:

```
<a> := <x> ":=" <e>
<e> := <c> | <x> | <o> "(" <es> ")"
<es> := <e> <es> | ""

```

نکته:متغیرهایی که در وسط برنامه استفاده می‌شوند به تعریف شدن در ابتدای برنامه نیازی ندارند.تعریف متغیرها در ابتدای برنامه ، برای تعیین آرگومان‌های برنامه است.

همانطور که مقدارها فقط می‌توانند صحیح غیرمنفی باشند،پس می‌توانند ثابت باشند.لیستی از عملیات‌ها بی ربط است.پس آن‌ها هیچ اثر جانبی ندارند که شامل استثناهایی مثل تقسیم بر صفر باشند.

```
<c> ::= "0" | "1" | "2" | ...
<o> ::= "+" | "-" | "*" | "=" | "<" | ">" | ...

```

```
=, <, ... معنایی مثل سی دارند. معنی - این است که اگر x-y<0, باشد،آنگاه x-y=0.
```

مثال
----

ما برنامه‌ای نوشتیم که n امین عدد فیبوناچی را برای n>2 محاسبه می‌کند.

```
(n)
(init)

init: x1 = 1
      x2 = 1

fib:  x1 = x1 + x2

      t = x1
      x1 = x2
      x2 = t

      n = -(n 1)

      if>(n 2) then fib else exit

exit: return x2

```

x1 موجود در حلقه (i+2-1) امین عدد فیبوناچی وx2 موجود در حلقه (i+2) امین عدد فیبوناچی است.

ما می‌توانیم درستی این متد را برای n=4 با دنبال کردن مراحل اجرا بررسی کنیم.

{\displaystyle {\begin{aligned}&\left({\mathtt {init}},\ \left[n\mapsto 4,\ x1\mapsto 0,\ x2\mapsto 0,\ t\mapsto 0\right]\right)\\\rightarrow &\left({\mathtt {fib}},\ \left[n\mapsto 4,\ x1\mapsto 1,\ x2\mapsto 1,\ t\mapsto 0\right]\right)\\\rightarrow &\left({\mathtt {fib}},\ \left[n\mapsto 3,\ x1\mapsto 1,\ x2\mapsto 2,\ t\mapsto 0\right]\right)\\\rightarrow &\left(\left\langle {\mathtt {halt}},\ 3\right\rangle ,\ \left[n\mapsto 2,\ x1\mapsto 2,\ x2\mapsto 3,\ t\mapsto 0\right]\right)\end{aligned}}}

```
{\displaystyle \left\langle {\mathtt {halt}},\ v\right\rangle } مرحلهٔ نهایی برنامه است , که مقدار v را برمی گرداند.
```

منابع
-----

1. ↑  کارستن کی گومارد و نیل دی جوینز کامپایلر خود را به وسیله ی ارزیابی جزئی ساختند.

مشارکت‌کنندگان ویکی‌پدیا. «Flow chart language». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۲۱:۱۳, ۵ July ۲۰۱۳.