[英](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.