langcc:下一代编译器编译器
langcc是一种工具,它以标准的BNF样式格式对语言进行正式描述,并自动生成编译器前端,包括语言的抽象语法树(AST)和遍历,词法分析器,解析器和漂亮的打印机的数据结构定义。 还用作以下技术报告的配套软件实现,这些技术报告描述了经典 LR 解析范例的几项创新:
langcc
langcc可用作 和 (或 和 ) 组合的替代品。但是,提供了许多附加功能,包括:
lex
yacc
flex
bison
langcc
datacc
与以前的编译器前端生成器不同,它足够高效和通用,可以捕获完整的工业编程语言,包括Python 3.9.12(语法/py.lang)和Golang 1.17.8(语法/go.lang)。在这两种情况下,都会自动生成一个比每种语言的标准库解析器更快的解析器(速度提高了 1.2 倍和 4.3 倍)。事实上,所支持的语法类足够通用,以至于该工具是自托管的:也就是说,人们可以在“语言的语言”本身中表达“语言的语言”,并用于生成自己的编译器前端。我们在规范实现中执行此操作;有关更多详细信息,请参阅源存储库中 bootstrap.sh 和语法/meta.lang 的文件。
langcc
langcc
langcc
langcc
langcc是一个研究原型,尚未在生产中广泛使用。但是,我们相信它本质上是稳定且功能完整的,可以用作独立工具,以促进对新编译器和编程语言的快速探索。
该版本已在 Ubuntu 22.04 和 macOS 12.5 上进行了测试,但也应该在一些其他版本的 Ubuntu 和 macOS 上运行,但需要稍作调整。
对于乌班图 22.04:
./deps_ubuntu.sh make -j8 sudo make install
对于 macOS 12.5(需要自制):
./deps_macos.sh make -j8 sudo make install
并且,为了引导前端本身,随后运行:
langcc
./bootstrap.sh
一旦(及其同伴)被安装,就可以运行各种示例:
langcc
datacc
examples
basic
calc
grammars/py.lang
grammars/go.lang
build/go_standalone_test
build/py_standalone_test
../go
../cpython
grammars/data.lang
datacc
langcc
grammars/meta.lang