Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ld2:一种基于中文的类SQL的DSL设计思路 #89

Closed
4b5ent1 opened this issue Sep 13, 2018 · 3 comments
Closed

Ld2:一种基于中文的类SQL的DSL设计思路 #89

4b5ent1 opened this issue Sep 13, 2018 · 3 comments
Assignees
Labels
active 不一定活跃,但没有弃坑 APL +组合逻辑/tacit族 +erlang +BEAM +forth stack based desgin FP/λ +函数式 nV-非冯 非冯诺依曼架构/体系 #prolog 逻辑编程 历史 实用 想法 +思路/观点 术语词典 自然语言NLP 规范 RFC 设计 design 输入法 keyboard input method engine
Milestone

Comments

@4b5ent1
Copy link
Member

4b5ent1 commented Sep 13, 2018

背景:

一开始并没有要设计DSL的想法,只是想在python里做如下尝试:

  1. 通过运算符重载,把python改造的像APL一点
  2. 把py的class对应成elixir的defmod
  3. 再仿照typescript写一个.d.py

这个方案记为GDPL/draft1[简称Ld1],在尝试的过程中意识到python无法实现APL的左参数结合运算,于是废弃,遂有draft2,也就是在python里另外实现一套DSL[简称Ld2,或芦笛]。


Design of Ld2:用途

构想Ld2的之初,并没有明确的目的,只是想先模拟古代的十进数制运算(十进制不等于十进位制)。后来觉得这样不够实用,于是参考SQL和正则表达式,有想兼容并包的考虑。但是编译SQL的工作远比替代正则要繁琐,故目前先只考虑正则部分的实现。

Ld2:概念

Ld2的很多概念都来自APL一族,比如stdlib一般叫标准库,而在Jsoftware里,叫词典。

Ld2目前主要用到的基本概念有:

  • 字:每一个可读的中文字符,都是字
  • 词:类似J里面的verb,但不限于动词的意思。对应c为宏,对应python可理解为函数
  • 词义字/关键字:Ld2的关键字是指预设的带有词义的单字。与常见编程语言的keyword不同,Ld2的关键字必要时可被替代(根据上下文语义),没有写死在语法解析和编译过程里
  • 关键词:目前没有关键词,故此概念保留
  • 语句:类似erlang里的表达式和J里的sentence。目前语句以文本的形式输入,类似SQL和正则

目前设计的预设词义字很随意,背后没有什么很深的考虑,分为3组共42个:

  • 前十位:定、答、求、得、解、成、设、问、曰、数
  • 后十二位:有、如、故、时、言、和、律、王、生、无、见、文
  • 上九位:用进错退差难将再改,十一位:命对出入行到回化留度知

Ld2:test_d2.py

第一部分:算术/术数

from draft2 import , 

(1)==('一')==-'一'
(2)==-'一加一'
3==(3).==-'再加一'-
4==--'三加一'


=.; -'有数七到十二'
=-'平均数'-  # [平均]一词属stdlib
9.5==-

第二部分:正则

from draft2 import ,,

.-'其为.+'
r'\[\{.+\}\]' == --'[{其}]'-

=; .=--
r'\[\{.+\}\]' == .-'[{.+}]'

Q/A

问:如果业务相关的命名是白话 配上文言的关键词?
对:这个考虑到了,有个折中方案,就是[求]是基于单字的,而[有]和[设]是可以兼容当前的编程语言环境的。
对:设,类似于SQL里的DDL;求,类似SQL的DML;用[有]来声明非单字用词,比如苹果,自行车;比如[设苹果有三百,西瓜有二十,苹果和西瓜为水果]求[水果总数]
对:[定]是用来规范API/统一FFI引用/设置常量,这三个主要用途。比如设[定R为import request][设取为R.get,网址为xxx,求取网址]

ref


next/RFC

  • 借鉴prolog/datalog/minikanren,实现逻辑编程
@4b5ent1 4b5ent1 added 想法 +思路/观点 设计 design APL +组合逻辑/tacit族 labels Sep 13, 2018
@4b5ent1 4b5ent1 added this to the 2018戊戌 milestone Sep 13, 2018
@4b5ent1
Copy link
Member Author

4b5ent1 commented Sep 13, 2018

待续。有空接着补。二楼留着填充随手想到的例子。
[定R为redis,R有主为R.master,有从为R.slave或.replica]


image

数有九宫,可用作namespace下的变量集合。九宫[1-9]为后天自然序/从左往右从上到下,负[1-9]为先天自然序,从上往下从右往左;[一至九]为宫序。这个设定主要方便矩阵运算以及兼容三值逻辑/平衡三进制。
九宫可以嵌套,比如宫三三,记为左一格的下属左一格。

image

术有八门,同理。类似极坐标与直角坐标的关系。

@4b5ent1
Copy link
Member Author

4b5ent1 commented Oct 17, 2018

进展:Ld2e。Ld2e是elixir下的简化版演示:
用elixir实现一个简单的中文语句解析》https://zhuanlan.zhihu.com/p/46030123

@4b5ent1 4b5ent1 changed the title 一种基于中文的类SQL的DSL设计思路 Ld2:一种基于中文的类SQL的DSL设计思路 Oct 17, 2018
@4b5ent1 4b5ent1 added nV-非冯 非冯诺依曼架构/体系 实用 输入法 keyboard input method engine 术语词典 规范 RFC 历史 FP/λ +函数式 active 不一定活跃,但没有弃坑 自然语言NLP +erlang +BEAM +forth stack based desgin #prolog 逻辑编程 labels Dec 8, 2018
@4b5ent1
Copy link
Member Author

4b5ent1 commented Dec 8, 2018

这个方案已经属于历史讨论的参考内容了,从Ld2,到Ld2e这个poc,再到CPN+PN2,最后是C8/P语言,基本上意味着主线剧情已经步入正轨

@4b5ent1 4b5ent1 closed this as completed Dec 8, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
active 不一定活跃,但没有弃坑 APL +组合逻辑/tacit族 +erlang +BEAM +forth stack based desgin FP/λ +函数式 nV-非冯 非冯诺依曼架构/体系 #prolog 逻辑编程 历史 实用 想法 +思路/观点 术语词典 自然语言NLP 规范 RFC 设计 design 输入法 keyboard input method engine
Projects
None yet
Development

No branches or pull requests

1 participant