計算語言學 -- 使用 C 生成運算式

計算語言學

簡介

詞彙

語法

語意

理解

問題領域

語言生成

語法剖析

語意分析

處理方法

正規表達式

BNF 語法

掃描

剖析器

符號表

解譯

編譯

翻譯

各種語言

組合語言

程式語言

標記語言

維基語言

自然語言

中文

英文

程式實作

JavaScript

C

Python

相關書籍

自然語言處理

編譯器設計

系統程式

訊息

相關網站

參考文獻

最新修改

簡體版

English

C 語言程式範例

專案下載:gexp.zip

確定性語言生成

程式:gexp.c

語法:

E=T + T
T=F * F
T=3

程式執行結果:

D:\ccc101\CL>gcc gexp.c -o gexp

D:\ccc101\CL>gexp
3*3+3*3

機率式語言生成

  • 機率函式庫:rlib.c
    • int randInt(int n):隨機傳回一個小於 n 的整數 (0,1,2…, n-1)
      • 用法:randInt(5) 會傳回 0, 1, 2, 3, 4 其中之一
    • int randChar(char *set):隨機傳回 set 中的一個字元
      • 用法:randChar("0123456789") 會傳回一個隨機的數字

程式:gexpr.c

語法:

E=T [+-] T
T=F [*/] F
T=[0-9]

程式執行結果:

D:\ccc101\CL>gcc gexpr.c -o gexpr
D:\ccc101\CL>gexpr
1/4+9*8
8*4-5/7
1/5+7*1
4*3+2/6
8/7+1*9
2/9-4/1
2/3+1/3
8/4+7/9
3/9+6/0
2*6+2*8

程式:gexpr2.c

語法:

E=T ([+-] T)*
T=F ([*/] F)?
T=[0-9]

程式執行結果:

D:\ccc101\CL>gcc gexpr2.c -o gexpr2

D:\ccc101\CL>gexpr2
1
0
8+5/7-5/6+2*2+8/6+9/9
4/2
3/1
8
2
9/9
6*2
6*4

程式:gexpr3.c

語法:

E=T ([+-] T)*
T=F ([*/] F)?
T=[0-9] | (E)

程式執行結果:

D:\ccc101\CL>gcc gexpr3.c -o gexpr3

D:\ccc101\CL>gexpr3
7*(8+5/1)-1*2-8/1(7)/2
4/8
2
(1)/2
0*(5/0)-((4*6)*9)/((9/9)*6)
5*9
7*1
7*2+4*1
7
5

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License