我需要将输入文本文件解析为自定义语言,我应该逐行解释它的命令并执行它,这就是我应该期望的输入:

#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语法命令或其他命令。现在,我应该解析print函数和assign命令中的内容,我应该忽略空格,它们也可能不作为分隔符。

请给我一些指导,我应该使用哪些字符串函数,以及如何使其工作,我的意思是您可以如何切割标记并识别数学符号?我猜它应该使用一些堆栈来遵循列表类型和引号的括号,对吗?任何一般和更详细的信息将不胜感激,谢谢(:

ps。

这是此代码的输出:

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)


我已经有了满足我需要的所有重载运算符,我只需要正确解析它并将其发送给我已经构建的函数即可。

最佳答案

所以你没有机会阅读the Dragon Book ...

您如何考虑将Lua或Python解释器嵌入产品中,而不是发明自己的语言?它们是更通用和完善的编程语言。此外,Google会帮助您找到许多有关如何嵌入它们的教程,例如:


http://docs.python.org/extending/embedding.html
http://www.ibm.com/developerworks/linux/library/l-embed-lua/


发明自己的语言的缺点是:即使成功解析了自己的语言,也需要为其定义语义。解析仅处理语法,这与语义不同。我不知道您的情况,但是对于一个软件项目来说,两者通常都需要很长时间才能学习。

至于Boost Spirit:我不建议您使用那些只是想通过写出自己的聪明才智的人写的(但最后表明他们对实用的软件设计不了解。)

10-01 05:32
查看更多