实现运算符重载和内联函数

发布于 2024-10-31 00:56:33 字数 414 浏览 2 评论 0原文

我正在构建一个小型解释器。到目前为止,我有能力计算数学表达式,包括 变量和几个函数(如 MOD、MAX 等)。我需要添加两个功能:

在线算子重载算子 超载是一个术语,指的是 新运营商的创建 具有您其中之一的功能 现有功能

例如在输入过载之后 *# POW, 3 *# 2 将得到 9。

另外创建内联函数 对于运算符重载,您还将 需要支持内联函数 创作4.换句话说,你将 支持创建新功能, 使用以下语法:内联 _FUNC{@arg1, @arg2, ...}

所以,我不知道从哪里开始。如果有人可以将我链接到某个地方,我可以阅读有关已知技术或现有 java 工具的信息 这可能对我有帮助,那会很有帮助。我什至不知道要寻找什么。谢谢!

i am building a small scale interpreter. so far i have the capability to calculate mathematical expressions including
variables and several functions (such as MOD, MAX etc...). i need to add two capabilities:

Online Operator Overloading Operator
overloading is a term which refers to
the creation of new operators which
have the functionality of one of your
existing functions

so for example after typing overload
*# POW, 3 *# 2 will result 9.

Inline Function Creation In addition
to operator overloading, you will also
need to support inline function
creation4. In other words, you will
support the creation of new functions,
using the following syntax: inline
_FUNC{@arg1, @arg2, ...}

So, i have no idea where to start. If anyone can link me somewhere i can read about known techniques or existing java tools
that might help me, that would be very helpfull. I don't even know what to look for. thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倾城花音 2024-11-07 00:56:33

您需要在词法分析器中执行词法分析时处理新关键字。

例如,如果用户输入 overload *# POW,您的词法分析器应该能够识别 3 个标记:“overload”、“*#”和“POW”。类似地,对于函数创建,您的词法分析器需要对大括号进行标记(大括号之间的空格/换行符数量微不足道)。

接下来,您需要修改您的解析器并构建语法树。例如,在对 3 *# 2 执行语法分析后,您的语法树应该能够识别什么是运算符以及什么是操作数。

最后一步是运行语法树并解释/评估结果。

至于工具,有词法分析器和解析器生成器。如果您的词法分析器和解析器已经有一些现有代码,我建议您避免使用这些工具,而只需对现有代码进行必要的修改。

you need to handle the new keywords while performing lexical analysis in your lexer.

for example, if the user enters overload *# POW, your lexer should be able to identify 3 tokens: "overload", "*#" and "POW". similarly, for the function creation, your lexer needs to tokenize the curly braces (amount of whitespace/line-breaks between curly braces is insignificant).

next, you need to modify your parser and build a syntax tree. for example, after performing syntax analysis on 3 *# 2, your syntax tree should be able to identify what are the operators and what are the operands.

the final step is to run through the syntax tree and interpret/evaluate the results.

as for tools, there are lexer analyzers and parser generators. if you already have some existing code for your lexer and parser, i suggest that you avoid these tools and just make the necessary modifications to the existing code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文