V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
JettChen
V2EX  ›  分享创造

写了一个面向日历的编程语言

  •  
  •   JettChen ·
    JettChenT · 2023-02-10 12:13:12 +08:00 · 1955 次点击
    这是一个创建于 631 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Github: github.com/JettChenT/timeblok

    Hi! 为了更好地安排我的寒假时间,我花了一个多月学了学编译原理,并写了一个能够让用户通过纯文本管理日程的语言。

    现在基本功能也差不多做出来了(终于可以计划我那所剩无己的寒假了),所以就来 v2 上发一下,请多多指教!

    具体而言,我设计了一个声明式的 DSL, 在编译器编译之后能导出一个 .ics 文件,这个文件格式大部分日历 app 都支持。

    举个例子,若我想要安排下个学期 (2/17 到 6/30) 的日程,可以这样写:

    2023--
    -2-16 开学
    
    {-2-17 ~ -6-30 and workday}
    6:30am 起床
    5pm 回家
    
    {sun}
    4pm~5pm 每周回顾    
    

    编译后,这就可以直接导入到你的日历 APP 里: 图片

    主要功能

    • 在给定日期的给定时间轻松创建日历事件。
    • 能够添加有关事件的笔记和元数据。
    • 基于继承和覆盖的动态解析日期
    • 基于复合的过滤器(Filters) 来表示复杂的日期重复规则等。

    具体的语言设计等文档在 README 里。

    应用场景 /需求

    • 图形界面的日历 APP 不足以表示复杂的重复规则,点来点去也挺烦的(
    • 文字界面大大增加了可扩展性,并提供了更高的自由度
    • 有很多可以做的衍生应用场景,如在 Obsidian Logseq 这种 PKM 里面做插件,或者和 GPT 等 LLM 结合实现自然语言日程创建功能等

    感兴趣的话, 欢迎各位在 github 上贡献和在这里讨论!

    7 条回复    2023-02-11 12:29:21 +08:00
    loading
        1
    loading  
       2023-02-10 12:57:45 +08:00 via Android
    看看 todo.txt
    lookStupiToForce
        2
    lookStupiToForce  
       2023-02-10 15:37:53 +08:00
    请问 OP ,有没有国家法定节假日的关键字或者可以自定义一个国家法定节假日的变量,用在示例里的 workday 那儿啊?😂
    dddys
        3
    dddys  
       2023-02-10 15:49:13 +08:00
    这是 DSL ,并不能算是 language
    JettChen
        4
    JettChen  
    OP
       2023-02-10 15:56:44 +08:00
    @lookStupiToForce 正准备通过 workalendar 支持这个功能!这个[issue]( https://github.com/JettChenT/timeblok/issues/7) 里面有 track
    JettChen
        5
    JettChen  
    OP
       2023-02-10 15:57:30 +08:00
    @dddys 是的,后面正文我也写了,抱歉前面标题党了一下😂
    whileFalse
        6
    whileFalse  
       2023-02-11 11:57:43 +08:00 via iPhone
    这是为了 dsl 而 dsl 吧…看示例感觉 yaml 就足够方便了
    missdeer
        7
    missdeer  
       2023-02-11 12:29:21 +08:00
    感觉这个需求不需要编译原理,当然用了编译原理更硬核
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   957 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:25 · PVG 04:25 · LAX 13:25 · JFK 16:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.