C++解析为自定义语言解释器
C++ parsing as custom language Interpreter
我需要将输入文本文件解析为自定义语言,我应该解释它的命令(逐行)并执行它,这就是我应该期望的输入:
#Some variables
myInt = 2
myFloat = 2.5
myString = “Hello”
#Lists
myList = (myInt, myFloat, myInt + myFloat)
myOtherList = (myFloat + myFloat, myInt+ myInt)
subList = myList[:1]
completeList = myList + myOtherList + subList
#This should have no effect (it is ok if it is being calculated)
2+4
#Now some printing
print(myString)
print(“World”)
print(completeList)
print(completeList[3])
#Some syntax errors
b = “hello, this string is not enclosed right
c = myString + completeList
d = myInt + SOME_VARIABLE_I_HAVENT_DEFINED_YET
#First string to appear makes everything a string
print(1 + 2 + 15.5 + 2.2 + “Hi” + 3 + 4 + 6)
print(1 + 2 + 15.5 + 2.2 + 3 + 4 + 6 + “hi”)
print((1,2))
所以我已经有了第一个检查功能,现在我知道什么时候是print/assign/comment/bad-syntax命令或其他什么。我现在应该解析打印函数和assign命令中的内容,我应该忽略空白,它们也可能不是可以指望的分隔符。
请给我一点指导,我应该使用什么字符串函数,以及如何使其工作,我的意思是,你如何切割到令牌,并识别数学符号?我猜它应该使用一些堆栈来跟随列表类型的括号和引号,不是吗?任何一般和更详细的信息将不胜感激,谢谢(:
p.s.
这就是这个代码的输出:
Hello
World
(2, 2.5, 4.5, 5.0, 4, 2, 2.5)
5.0
InvalidSyntax : b = “hello, this string is not enclosed right
InvalidSyntax : c = myString + completeList
UndefinedVariableName : SOME_VARIABLE_I_HAVENT_DEFINED_YET
20.7Hi346
33.7hi
(1,2)
我已经拥有了所需的所有重载运算符,我只需要正确解析它并将其发送到我已经构建的函数中。
所以你还没有机会阅读《龙书》。。。
你如何考虑将Lua或Python解释器嵌入到你的产品中,而不是发明你自己的语言?它们是更常见、更成熟的编程语言。此外,谷歌将帮助你找到许多关于如何嵌入它们的教程,例如:
- http://docs.python.org/extending/embedding.html
- http://www.ibm.com/developerworks/linux/library/l-embed-lua/
发明自己的语言的缺点是:即使你成功地解析了自己的语言,你也需要为它定义语义。解析只处理语法,这与语义是不同的。我不知道你的情况,但这两种情况通常都需要很长时间来学习一个软件项目。
至于Boost Spirit:我不建议使用它,因为它是由那些只想通过编写它来展示自己聪明的人编写的(但最终显示了他们对什么是实用软件设计的无知。)
有一个很棒的C++库:SPIRIT
相关文章:
- 不同语言中相同代码的不同行为
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- 刚接触C++,难以理解语言的细微差别
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 我的C++语言蛮力算法有问题
- 文件格式的编写解释器(C++ Arduino)
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 为什么编程语言被编译为汇编程序而不是二进制?
- 是否有用于C++的类似 C 的语法脚本语言解释器?
- C++解析为自定义语言解释器
- 脚本语言解释器源代码,可以学习
- 编写一个编程语言解释器