2011-11-21 50 views
0

我正在編寫幾種語言的解釋程序,在TeX中,這將允許TeX用戶從他們最喜歡的語言(如果支持)插入一些代碼,並使TeX在生成時運行它pdf的結果。最簡單的真實世界語言

我開始寫了一個解釋器Brainfuck,因爲它是一種非常簡單的語言。我認爲GolfScript將是小菜一碟,但它比我預期的更豐富(主要是因爲它基於相當精心製作的Ruby)。爲此,我可能會做Whitespace。但這些都不是人們真正使用的,所以到現在爲止,整個過程主要是練習如何在TeX中最好地編寫解釋器。

我的問題是:我應該考慮什麼現實世界的語言?它應具備以下素質:

  • 簡單(我還沒準備好爲Python),
  • 通常被用作單行(如果可能),
  • ,具有相當大的用戶羣。

我假設每種語言都可以有一個解釋器(編譯只會提高速度),請提一下如果您想到所提議的語言的技術障礙。編輯:我也有興趣評論,如「實現Perl 2,然後逐漸添加對後續版本的支持」(不知道如果特定的場景是一個好主意,雖然)。我已經編寫了一些正則表達式的支持。

+1

這是運行代碼並用代碼輸出代替它的地方,就像預處理器一樣嗎?我無法想象編寫自己的解釋器是一條路,只需提取代碼段並將它們傳遞給真正的編譯器即可運行並返回結果。 –

+0

我同意。不幸的是,舊的TeX引擎不能調用外部程序。而較新的TeX引擎通常會禁用此功能,因爲訪問操作系統是潛在的安全風險。 ---如果這還不夠,只要把它看作是浪費的練習:-)。 –

回答

2

基於堆棧的語言如Forth(甚至是PostScript的子集)如何?堆棧操作應該相對容易地轉換成TeX構造。最後,如果所有這些都是爲了練習而完成的,那麼實現C預處理器又如何呢?

+0

謝謝你的想法!我已經在本週末實施了一個(圖靈完成)[Forth子集](https://github.com/blefloch/latex-runner)。我仍然需要實現一些核心詞彙,但我認爲這應該讓我再花一個週末。我會考慮將其擴展到PostScript,因爲它允許人們使用一些特定於ps的代碼,並且仍然直接(tex => pdf)而不是去(tex => dvi => ps => PDF)。 –

1

您可以使用一些基於LISP的語言,如Beginning Student Language或某些ML變體,如OCaml。對於一個簡單的練習解釋ML-如代碼,只是實現的定義,功能,應用,運算和條件表達式爲您提供了一個良好的開端:

let rec factorial n = 
    if n = 0 then 1 else n * (factorial (n-1)) 

let sqr x = x * x 

let compose f g x = f (g x) 

(compose sqr sqr) (factorial 3) 

還要考慮Lua其目標是成爲可以使用的一個很好的腳本語言讓用戶自定義您的應用程序並且非常受歡迎。