解析换行符终止的编程语言
Parsing a newline-terminated programming language
最近我一直在尝试开发一种自定义编程语言。但是我(尝试)制作的以前的语言是以分号结尾的,而我现在制作的语言是以换行符结尾的,就像 Python.
我偶然发现的问题是,虽然每个分号在例如C++ 被视为某种终止符,Python 中的换行符并不总是充当终止符。
例如:
// incorrect in c++
myfunc();;;;otherfunc();
和
# completely fine in python
myfunc()
otherfunc()
所以我的问题是,我该如何解析它?像这样的语言的 backus-naur 形式是什么样的?
我不知道 C++,但在许多 semicolon-terminated 语言中,;;
是完全有效的。 Example in PHP
在抽象语法中表达这一点的一种简单方法是允许一个空语句——即仅由可选空格组成的语句。然后解析器可以接受它是有效的,但什么也不发出。
在the PHP parser中,statement
的作品之一是:
';' /* empty statement */ { $$ = NULL; }
可以在语法中使用相同的规则(经过必要的必要修改),其中换行符被视为重要标记,而不是分组到空格中。
最近我一直在尝试开发一种自定义编程语言。但是我(尝试)制作的以前的语言是以分号结尾的,而我现在制作的语言是以换行符结尾的,就像 Python.
我偶然发现的问题是,虽然每个分号在例如C++ 被视为某种终止符,Python 中的换行符并不总是充当终止符。
例如:
// incorrect in c++
myfunc();;;;otherfunc();
和
# completely fine in python
myfunc()
otherfunc()
所以我的问题是,我该如何解析它?像这样的语言的 backus-naur 形式是什么样的?
我不知道 C++,但在许多 semicolon-terminated 语言中,;;
是完全有效的。 Example in PHP
在抽象语法中表达这一点的一种简单方法是允许一个空语句——即仅由可选空格组成的语句。然后解析器可以接受它是有效的,但什么也不发出。
在the PHP parser中,statement
的作品之一是:
';' /* empty statement */ { $$ = NULL; }
可以在语法中使用相同的规则(经过必要的必要修改),其中换行符被视为重要标记,而不是分组到空格中。