像你们这些人一样,我经常用几种语言写作.当涉及到规划的东西,(甚至回答一些SO问题)时,我实际上是用一些未指明的混合语言来思考和写作.虽然我曾经被教导要做到这一点使用流程图或UML类图,现在回想起来,我觉得"我的"伪语言具有的成分C,Python,Java,bash,Matlab,perl,Basic.我似乎无意识地选择了最适合表达概念/算法的成语.
常见的习语可能包括范围类似Java的括号,pythonic列表推导或缩进,继承C++,C#-style lambdas,类似matlab的切片和矩阵运算.
我注意到,人们很容易认识到我正在试图做什么,并且人们很容易智能地翻译成其他语言.当然,这一步涉及考虑角落案例,以及每种语言特殊行为的时刻.
但在现实中,大多数这种语言的交流关键字和库函数通常表现相同的一个子集-数学函数,类型名称,while/ for/ if等显然,我不得不像排除口齿不清,APL衍生许多"奇"的语言,但...
所以我的问题是,
是否已存在识别文本文件编程语言的代码?(当然,这必须是比eclipse的语法树更简单的任务,或者比谷歌翻译的语言猜测功能,对吧?)事实上,SO语法荧光笔是否做了这样的事情?
从理论上讲,创建单个解释器或编译器是否可以识别您在任何时刻使用的语言习惯用语(可能是"智能地")执行或转换为可运行的表单.并标记我的语法在行为方面不明确的极端情况.我看到的直接困难包括:知道何时在依赖于缩进和依赖于支撑的模式之间切换,识别有趣的运算符(如*pointervs *kwargs)以及知道何时使用列表与类似数组的表示.
是否存在可以管理这种灵活口译的语言或口译?
我是否错过了明显的障碍?
谢谢大家的回答和想法.我打算写一个基于约束的启发式翻译可能,可能,"解决"代码的本意并转化为真正的Python代码.它将注意到来自许多常用语言的关键词,并将使用句法线索来消除人类意图的歧义 - 如间距,括号,可选的帮助词,let或者then,变量以前使用的上下文等,以及常见约定的知识(如资本名称,我迭代,和变量/方法例如包含单词的命名的一些简单的有限的了解get,asynchronous,count,last,previous,my等等).在真正的伪代码中,变量命名与操作本身一样丰富!
使用这些线索,它将创建关于每个操作的实现的假设(如基于0/1的索引,何时应该捕获或忽略异常,什么变量应该是const/global/local,从哪里开始和结束执行,以及什么位应该在单独的线程中,注意数字单位匹配/需要转换时).每个假设都具有给定的确定性 - 程序将列出每个语句的假设,因为它哄骗你写入可执行文件的内容!
对于每个假设,如果您不喜欢初始解释,您可以"澄清"您的代码.图书馆问题非常有趣.我的翻译器就像一些IDE一样,将读取所有模块中可用的所有定义,使用一些关于哪些类/方法最常使用和在什么情况下使用的统计数据,并且只是猜测!(给程序添加一个注释,说明为什么会这样猜测......)我想它应该尝试执行所有操作,并警告你不喜欢它.它应该允许任何内容,但是如果你是模棱两可的,请让你知道几种替代解释是什么.
它肯定还需要一段时间才能管理像@Albin Sunnanbo这样不寻常的ImportantCustomer例子.但是我会告诉你我是怎么过的!
language-agnostic algorithm interpreter artificial-intelligence pseudocode
我主要是一个Python程序员,它经常被描述为"可执行的伪代码".我使用了一点AppleScript,它似乎是我见过的最类似英语的编程语言,因为几乎所有运算符都可以是单词,它可以让你在任何地方使用"the"(例如,这个愚蠢的例子我只是想出了:
set the firstnumber to 1
set the secondnumber to 2
if the firstnumber is equal to the secondnumber then
set the sum to 5
end if
Run Code Online (Sandbox Code Playgroud)
是一个有效的AppleScript程序.有没有比这些更像英语的编程语言?