We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
某些可能和这个该死的 issue 有关的事情:
因为这次新弄的是从这篇介绍高斯-约当算法的文章上复刻下来的,方便自己下去打印了看。
Telegram 之前上的 MTProto 代理,真舒服,结果最后我从网上随便找的 Proxy 现在全部爆炸了(估计是人太多挤炸了)(现在我越发展系统管理的能力就越差了,呵呵,大概是复杂的东西越找越多然后瞬间信心都没有了,因为实在是 见得多了... 🐸 ),我得继续维护我的笔记啊... 🤔 😢 So F@CK YOU 防fāng洪hóng新!
我要给 @LEXUGE 发 comment 啊,因为我 Telegram 很难上了嘛。我 最后(指上学前) 有话要说...
lexuge:
我错了,我不该用 <code> 装这些的
--
三月十七和之前这七天学了点东西,觉得可能对大佬有帮助,大佬可以收着呗:
-- 后来我才知道你新写了个了 Rust 的 pest PEG 解析器... https://github.com/XCH-CEB/xch-project/blob/master/lib_xch/src/parser/ast/treebuilder.rs#L30 之前发的是我以为没有这个新前端,要不然想来 WebAssembly 的前端也不好做到输入即时检查解析配平啊... 知道你目前应该不会主要学写编译器或者写其他更简单的基于编译原理知识的东西,所以我只想提一点可以帮助扩展 XCH_CEB 前端程序重构的基本思路
== 写程序『认』字符串表达的结构的方法论
duangsuse 目前尝试过的,一共有三种:第一种是针对 String 的子串递归解析法、第二种是针对字符(或者词元)流的递归下降解析法、第三种则是基于各种字符串模式匹配算法的(比如 LL、LR、LALR),而基于 LALR 之类的算法则可能会使用到栈和线性表等数据结构
一般来说直接字符流递归下降法会比拿一串固定长度字符串 subseq、递归下去要好看很多,信息往往可以隐式传递,直接调用 getc() 这种比 index 字符串的往往好一些(虽然基于流也会有 buffer 维护/语法歧义分支解析 lookAhead 的问题(设计不好的解析器子程序或许还要输入流支持反向 seek),但是这些问题其实在 subsequence 里也存在),而且可以用简单的 return 指令允许更灵活地控制解析流程。
getc()
return
基于流的处理方法其实非常 UNIX,但是即便是要处理递归文法,好像初学者都会用拆分子串法(XCH-CEB 目前使用的其实就是拆分 regex 匹配),因为递归总是难理解一些。(虽然递归写解析器很方便)
解析器也是属于编译原理/自然语言处理里面非常基础的内容了,所以它叫前端,稍微有点意思的可能就是二维文法了,反正编译原理的解析器,一般都很 trivial,没啥值得研究的。
稍微进阶一点的基础可能就是解析二元操作优先级了,加入右优先级的话,就可以处理 1^2^3 (应该被解析为 1^(2^3) 而不是 (1^2)^3)这种『右结合性』的表达式了,这又涉及到解析器进行左递归还是右递归(然后回溯出的二元语法树哪个子树离根节点远)(参见 lambda 算子 当然是从这里看到的),,,
1^2^3
1^(2^3)
(1^2)^3
这就有点类似于 C++ 的 std::cout << 流式操作和 Java8 的 System.out.println 对比一样,其实曾经写循环调用 println 打印数据或者 String.format,还不如直接 << 操作符写输出呢。
std::cout <<
System.out.println
println
String.format
<<
subsequence 解析法的例子:
基于字符流的解析器例子(也有些是 Lexer,或者说输出词条的 Parser 层面的东西)
https://github.com/qnnnnez/rs/blob/master/src/sexpr.rs 一个类 Scheme 语法的 parser
https://www.packtpub.com/application-development/llvm-cookbook 里 TOY 语言的前端,就是一个经典的 C++ 递归下降法解析器,支持左递归(传递自己这一层子解析器的归纳结果给下一层,然后回溯回来就是自己这一层先被求值,(1+2)+3. 返回的是第二个 + 解析器的二元运算树
https://github.com/duangsuse/GeekApk/blob/master/src/main/kotlin/lime/text/Parser.kt#L52 +https://github.com/duangsuse/Lite/blob/master/src/lite/lexer/Lexer.java#L150
https://github.com/covscript/covscript/blob/33ead62817b87e049a615b8b68560471bce9ad78/sources/compiler/lexer.cpp#L24
最后推荐文章,建议去体验一下 parser combinator(parserc) 风格的解析器(如果还没有的话)
https://ice1000.org/2017/07/26/HaskellParsers/ https://ice1000.org/2017/07/26/HaskellParsers2/ https://ice1000.org/2018/11/23/MultiDimentionalSyntax/
这个 Functional DFS(Haskell Applicative 函数式思路深度优先搜索) 的也很好看 https://ice1000.org/2017/05/26/UseMonadInDfs/ 这里有源代码,不过好像是改了一小部分防无脑抄的? https://ice1000.org/gist/fp-dfs/
-- 后来我才知道你新写了个了 Rust 的 pest PEG 解析器... https://github.com/XCH-CEB/xch-project/blob/master/lib_xch/src/parser/ast/treebuilder.rs#L30 之前发的是我以为没有这个新前端,要不然想来 WebAssembly 的前端也不好做到输入即时检查解析配平啊...
这位学长是硕士(研究生)毕业... 服 也是喜欢玩各种线性代数和其他高等数学方面的东西...
https://github.com/duangsuse/Share/blob/master/Gauss-Jordan-elimination.pdf
我抄来的文字(
他记了不少高等数学笔记,都在自己的博客上,也有 GitHub,可以膜一下。
-- 虽然我不得不说,其实在中国目前的教育体制下,很多学生命中注定就得学一些入门的高等数学内容了... 当然还是入门
但这些真的是高等数学,不是现在高中数学会教的导数(原谅我目前数学还不好,所以无法举出好例子来)还有某知乎民科(搜索:哥巴赫猜想 知乎)的基本逻辑演绎证明...
The text was updated successfully, but these errors were encountered:
顺便记个单子等下次回家打印:
https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%86%8d%e8%b0%88-%e7%89%9b%e9%a1%bf%e6%b3%95newtons-method-in-optimization/
https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%86%8d%e8%b0%88-%e6%9c%80%e9%80%9f%e4%b8%8b%e9%99%8d%e6%b3%95%e6%a2%af%e5%ba%a6%e6%b3%95steepest-descent/
https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e7%94%a8%e4%ba%ba%e8%af%9d%e8%a7%a3%e9%87%8a%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e4%b8%ad%e7%9a%84logistic-regression%ef%bc%88%e9%80%bb%e8%be%91%e5%9b%9e%e5%bd%92%ef%bc%89/
https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e5%a6%82%e4%bd%95%e9%98%b2%e6%ad%a2softmax%e5%87%bd%e6%95%b0%e4%b8%8a%e6%ba%a2%e5%87%baoverflow%e5%92%8c%e4%b8%8b%e6%ba%a2%e5%87%baunderflow/
https://www.codelast.com/%e5%8e%9f%e5%88%9b-%e3%80%8aneural-networks-and-deep-learning%e3%80%8b%e8%af%bb%e4%b9%a6%e7%ac%94%e8%ae%b0%ef%bc%9a%e5%8f%8d%e5%90%91%e4%bc%a0%e6%92%ad%e7%9a%844%e4%b8%aa%e5%9f%ba%e6%9c%ac%e6%96%b9/
Sorry, something went wrong.
曾经自己写的regex不是递归下降的,现在构建的AST(如果算的话)还是递归的。 上面提到那么多,自己写过还是有点感悟的,但是并不全懂。 暑假了再重构,谢谢指点!
No branches or pull requests
某些可能和这个该死的 issue 有关的事情:
因为这次新弄的是从这篇介绍高斯-约当算法的文章上复刻下来的,方便自己下去打印了看。
Telegram 之前上的 MTProto 代理,真舒服,结果最后我从网上随便找的 Proxy 现在全部爆炸了(估计是人太多挤炸了)(现在我越发展系统管理的能力就越差了,呵呵,大概是复杂的东西越找越多然后瞬间信心都没有了,因为实在是
见得多了... 🐸 ),我得继续维护我的笔记啊... 🤔 😢 So F@CK YOU 防洪新!我要给 @LEXUGE 发 comment 啊,因为我 Telegram 很难上了嘛。我
最后(指上学前) 有话要说...lexuge:
--
三月十七和之前这七天学了点东西,觉得可能对大佬有帮助,大佬可以收着呗:
送给目前在用 subsequence 解析 String 的你
-- 后来我才知道你新写了个了 Rust 的 pest PEG 解析器...
https://github.com/XCH-CEB/xch-project/blob/master/lib_xch/src/parser/ast/treebuilder.rs#L30
之前发的是我以为没有这个新前端,要不然想来 WebAssembly 的前端也不好做到输入即时检查解析配平啊...
知道你目前应该不会主要学写编译器或者写其他更简单的基于编译原理知识的东西,所以我只想提一点可以帮助扩展 XCH_CEB 前端程序重构的基本思路
== 写程序『认』字符串表达的结构的方法论
duangsuse 目前尝试过的,一共有三种:第一种是针对 String 的子串递归解析法、第二种是针对字符(或者词元)流的递归下降解析法、第三种则是基于各种字符串模式匹配算法的(比如 LL、LR、LALR),而基于 LALR 之类的算法则可能会使用到栈和线性表等数据结构
一般来说直接字符流递归下降法会比拿一串固定长度字符串 subseq、递归下去要好看很多,信息往往可以隐式传递,直接调用
getc()
这种比 index 字符串的往往好一些(虽然基于流也会有 buffer 维护/语法歧义分支解析 lookAhead 的问题(设计不好的解析器子程序或许还要输入流支持反向 seek),但是这些问题其实在 subsequence 里也存在),而且可以用简单的return
指令允许更灵活地控制解析流程。基于流的处理方法其实非常 UNIX,但是即便是要处理递归文法,好像初学者都会用拆分子串法(XCH-CEB 目前使用的其实就是拆分 regex 匹配),因为递归总是难理解一些。(虽然递归写解析器很方便)
解析器也是属于编译原理/自然语言处理里面非常基础的内容了,所以它叫前端,稍微有点意思的可能就是二维文法了,反正编译原理的解析器,一般都很 trivial,没啥值得研究的。
稍微进阶一点的基础可能就是解析二元操作优先级了,加入右优先级的话,就可以处理
1^2^3
(应该被解析为1^(2^3)
而不是(1^2)^3
)这种『右结合性』的表达式了,这又涉及到解析器进行左递归还是右递归(然后回溯出的二元语法树哪个子树离根节点远)(参见 lambda 算子 当然是从这里看到的),,,这就有点类似于 C++ 的
std::cout <<
流式操作和 Java8 的System.out.println
对比一样,其实曾经写循环调用println
打印数据或者String.format
,还不如直接<<
操作符写输出呢。subsequence 解析法的例子:
基于字符流的解析器例子(也有些是 Lexer,或者说输出词条的 Parser 层面的东西)
https://github.com/qnnnnez/rs/blob/master/src/sexpr.rs 一个类 Scheme 语法的 parser
https://www.packtpub.com/application-development/llvm-cookbook 里 TOY 语言的前端,就是一个经典的 C++ 递归下降法解析器,支持左递归(传递自己这一层子解析器的归纳结果给下一层,然后回溯回来就是自己这一层先被求值,(1+2)+3. 返回的是第二个 + 解析器的二元运算树
https://github.com/duangsuse/GeekApk/blob/master/src/main/kotlin/lime/text/Parser.kt#L52
+https://github.com/duangsuse/Lite/blob/master/src/lite/lexer/Lexer.java#L150
https://github.com/covscript/covscript/blob/33ead62817b87e049a615b8b68560471bce9ad78/sources/compiler/lexer.cpp#L24
最后推荐文章,建议去体验一下 parser combinator(parserc) 风格的解析器(如果还没有的话)
https://ice1000.org/2017/07/26/HaskellParsers/
https://ice1000.org/2017/07/26/HaskellParsers2/
https://ice1000.org/2018/11/23/MultiDimentionalSyntax/
这个 Functional DFS(Haskell Applicative 函数式思路深度优先搜索) 的也很好看
https://ice1000.org/2017/05/26/UseMonadInDfs/
这里有源代码,不过好像是改了一小部分防无脑抄的?
https://ice1000.org/gist/fp-dfs/
-- 后来我才知道你新写了个了 Rust 的 pest PEG 解析器...
https://github.com/XCH-CEB/xch-project/blob/master/lib_xch/src/parser/ast/treebuilder.rs#L30
之前发的是我以为没有这个新前端,要不然想来 WebAssembly 的前端也不好做到输入即时检查解析配平啊...
https://www.codelast.com/page/22/ (是的,他写了 22 页的博客)
About 页面: https://www.codelast.com/%e5%85%b3%e4%ba%8e/
这位学长是硕士(研究生)毕业... 服
也是喜欢玩各种线性代数和其他高等数学方面的东西...
https://github.com/duangsuse/Share/blob/master/Gauss-Jordan-elimination.pdf
我抄来的文字(
他记了不少高等数学笔记,都在自己的博客上,也有 GitHub,可以膜一下。
--
虽然我不得不说,其实在中国目前的教育体制下,很多学生命中注定就得学一些入门的高等数学内容了... 当然还是入门
但这些真的是高等数学,不是现在高中数学会教的导数(原谅我目前数学还不好,所以无法举出好例子来)还有某知乎民科(搜索:哥巴赫猜想 知乎)的基本逻辑演绎证明...
The text was updated successfully, but these errors were encountered: