最近我一直在嘗試開發一種自定義編程語言。但是我(嘗試)制作的以前的語言是以分號結尾的,而我現在制作的語言是由換行符終止的,就像 Python 一樣。
我偶然發現的問題是,雖然例如 C 中的每個分號都被視為某種終止符,但 Python 中的換行符并不總是充當終止符。
例如:
// incorrect in c
myfunc();;;;otherfunc();
和
# completely fine in python
myfunc()
otherfunc()
所以我的問題是,我該如何決議這個?像這樣的語言的 backus-naur 形式是什么樣的?
uj5u.com熱心網友回復:
我不了解 C ,但在許多以分號結尾的語言中,;;它是完全有效的。PHP 中的示例
在抽象語法中表達這一點的一種簡單方法是允許一個空陳述句 - 即,一個僅由可選空格組成的陳述句。然后決議器可以接受這是有效的,但什么也不發出。
在PHP 決議器中,其中一個產生statement是這樣的:
';' /* empty statement */ { $$ = NULL; }
可以在將換行符視為重要標記而不是分組到空格中的語法中使用相同的規則(已做必要的修改)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419831.html
標籤:
上一篇:有沒有更優雅的方法將包含mpz值的文本檔案讀入整數串列?
下一篇:使用特殊字符在c中決議的一般查詢
