elixir东游记:实现一个简单的中文语句解析

备份:https://zhuanlan.zhihu.com/p/46030123

代码地址:github:pyzh/gdpl-ex.poc-1

原语句是:List1为‘12332234‘;记a为List1,b为2;求a中b的个数

整个流程是这样的:

首先断句,然后判断句属性(这个步骤其实代码里没有严格实现)

第一句里面因为只有一个[为]字,所以可以认为第一句是个赋值语句;

而第二句有一个[记]字,这个在[Ld2]的设定里面,要比[为]的优先级高,所以第二句实际上是[记+为]的定义语句;

第三句是[求]语句,根据前文进行计算(这里假定[求:个数]是标准库里的一员)

关于[为]和[记为]的差别,在设定里,[为]只能指定值,而[记为]既可以指向值,也可以指向参量(如a→List1)

第三句里的[中],决定了a和b的层级顺序。关于[的]字的处理,目前Ld2还没有明确规范。

缘起:APL和ABC里的count primitive

图2:流畅的python》python的直系祖先/ABC的count语法

参考:

  1. Ld2/初稿:一种基于中文的类SQL的DSL设计思路 · program-in-chinese/overview #89
  2. 纪念《APL》出版50年
  3. ABC 快速参考:https://homepages.cwi.nl/~steven/abc/qr.html

原文地址:https://www.cnblogs.com/pyzh/p/elixir-zh-calc.html

时间: 2024-11-05 15:54:59

elixir东游记:实现一个简单的中文语句解析的相关文章

tp5 r3 一个简单的SQL语句调试实例

tp5 r3 一个简单的SQL语句调试实例先看效果核心代码 public function index() { if (IS_AJAX && session("uid")==1){ $sql=input("post.sql"); $sql=base64_decode($sql); if ($sql){ if (preg_match('/INSERT INTO|DELETE|UPDATE\s/i', $sql, $info)){ $result=\th

一个简单的json数组解析(阿里巴巴)

最近工作中遇到了json字符串解析的问题,但是项目中是有限制的,只能引用阿里巴巴和simple jar,所以我选择了Alibaba的jar,由于很长时间没用过json的东西了,有些淡忘,不免工作中遇到了会花费些许时间再去重拾记忆,所以写了一个简单的JSON 字符串数组的解析实例,仅此作为笔记,以后遇到了可以直接看一下,或许可以节省一时片刻的时间,时间就是金钱,就是生命,就是自信,就是信任... /** * */package com.test.pac1; import java.util.Arr

开发一个简单的chrome插件-解析本地markdown文件

准备软件环境 1. 软件环境 首先,需要使用到的软件和工具环境如下: 一个最新的chrome浏览器 编辑器vscode 2. 使用的js库 代码高亮库:prismjs https://prismjs.com/download.html markdown解析库:marked.min.js https://github.com/markedjs/marked 搭建工程 创建一个md-reader目录,进入md-reader目录 1. 目录结构 然后,创建需要的文件 md-reader |----sr

一个简单程序的实现,语句。

1. 一个简单程序的实现      首先看下代码: int i = 1; Console.WriteLine("i+2={0}", (i + 2));        确实很简单,慢慢的提高难度,在加入之前讲过的分支结构,现在需求是,用户输入一个整数数字,根据输入的整数数字来显示该数字是奇数还是偶数.代码如下: 1 Console.Write("请输入一个整数:");        2 int i = Convert.ToInt32(Console.ReadLine(

一个简单的WInCE(转载百度)

VS2008中开发智能设备程序的一些总结收藏1 结合前几日开发的<全国大坝基础数据库采集端>中的PDA程序开发过程,对VS2008开发智能设备上的程序做个小总结. 1         程序结构 程序中包括四个部分: 1. 系统配置 这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息.这部分的主要技术是XML文件的读取和写入. 2. 数据下载 从数据库中下载数据到PDA,PDA上的保存也是使用数据库.这部分的技术主要是PDA设备上的移动数据库开发和使及用PDA连接PC数据库 3

【Python】一个简单的例子

问题描述: Python基础篇 参考资料: (1)http://www.cnblogs.com/octobershiner/archive/2012/12/04/2801670.html (2)http://www.cnblogs.com/itech/archive/2010/06/20/1760345.html 例子: 求解Fibonacci glb_var.py gl_count=1 path.py # coding:utf-8 ''' Created on 2014-4-28 @autho

我们为之奋斗过的C#-----C#的一个简单理解

我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET Framework平台运行的所有编程语言. 2 C#概述 他是专门为.NET平台设计的一种语言. 3 .NET与C#的区别 .NET是一种平台,这种平台可以编译多种语言例如:VB,J#,而C#只是一种语言. 4 IDE IDE全称(Itergrated Developer Environment)

实现一个简单的个人助理

实 验 报 告 日期:2015年5月10日              院(系):信息科学与技术学院       专业(班级):计算机类 实验题目:实现一个简单的个人助理                                                  ----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy 一.     实验目的 1.    本实验面向C++语言的初学者. 2.    主要让实验者熟悉类的使用. 二

oracle学习 第一章 简单的查询语句 ——04

1.5 如何在SQL语句中使用算数表达式 可以在SQL语句中使用表达式.在表达式中可以使用一下4种运算符:+,-,*,/ 它们分别代表加.减.乘.除. 设想一下,在某一天,有个社会团体和工会团体参观你们的公司,您的老板为了树立公司的光辉形象,它要求您把午餐和茶水的费用加到员工的工资里并打印一张工资清单.于是您大概算了一下,其费用约合500元/月.之后您用例1-11的查询得到了老板索要的员工的工资清单. 例 1-11 SQL> SELECT empno,ename,sal,500+sal 2 FR