簡體   English   中英

(深奧)編程語言多次設計轉義字符

[英](Esoteric) programming language design escape characters multiple times

我正在創建一種(深奧的)編程語言。 一切順利,這就是我想出的:

所以語言的基礎是:

  • 大多數核心操作都是一個字符。 例如: % = 要循環的字符。
  • 這種編程語言在一行上,所有操作都由這個字符分隔: ! .
  • 它與堆棧一起工作,您可以在堆棧上推送和彈出數據。

一些有用的知識:

  • %<code>是循環操作,需要事先將要循環的數量壓入堆棧。

  • "<value>將它之后的東西壓入堆棧

  • ! 分離操作

  • #<name>呼叫 function

所以當我想循環播放某些內容時,它的工作方式如下:

"10!%<code>

所以我剛剛向您展示的代碼的細分: "10將 10 壓入堆棧(循環次數) !分隔操作% loops <code>要運行的代碼

<code> 沒有什么不同,所以它也需要用一個字符分隔。 我用$做到了,這有效。 所以當我實際給出代碼時,它看起來像這樣: "10!%"hello$#print

另一個細分:

  • "10推 10,在堆棧上循環的數量
  • ! 分開
  • %循環它旁邊的代碼
  • "hello ,將要打印的文本推送到堆棧
  • $這是一個逃脫! ,這就是問題開始出現的地方。 這個已經轉義了一次,嵌套在一個循環里,如果我想在循環里再做一個循環怎么辦?
  • #print調用打印 function

正如我所展示的,我在嵌套代碼中使用$作為分隔符,因為如果我使用! ,詞法分析器會認為一個新的頂級操作會再次發生(不是嵌套的)。 所以它不會做你期望的。 使用這種分離嵌套代碼的方法,在代碼開始中斷之前,我只能嵌套一層。

因此,假設我們要將另一個循環放入一個循環中。 使用當前方法,它看起來像這樣: "10!%"test$#print$"10$%"test2$#print

是的,我知道這是不可讀的,所以我會分解它:

  • "10推量循環(10)入棧
  • %循環
  • "test$#print這將打印消息test 。請記住這已經在一個循環中,因此它是嵌套的。
  • $"10$%這將再次循環(10 次)。
  • "test2$#print這通常應該,如果它沒有嵌套兩層或更深,打印test2 10 次(使用循環)。

但它不會多次打印test2 ,因為它使用與第一層相同的字符來轉義! 分隔器。 因此它轉義了 while 循環的代碼塊。 這會產生意想不到的結果,使得第二個循環不起作用,只打印一次test2。

有什么好辦法越獄的! 分隔符不止一次,所以詞法分析器可以區分不同的嵌套級別?

感謝您的時間。

如果你想嵌套任意深的東西,你需要你的語法來讓你知道每件事什么時候結束。 通常的方法是使用某種匹配的定界符。 例如,您可以使用"知道什么時候"結束, >知道什么時候<結束。 那你甚至不需要! 並且可能有類似的東西:

"10"%<"hello"#print>

打印hello 10 次。

然后您可以擴展%以允許循環計數器的名稱並使用@獲取命名值

"10"%i<"hello "#print@i#println>

然后會在每一行上用 hello 計數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM