我目前正在使用python 的 lark 解析器来尝试读取一些问题规范。我对扩展巴科斯-诺尔形式的“正确”语法感到困惑,尤其是关于如何分离 LHS 和 RHS。维基百科页面使用等号=,lark 只需要一个冒号;请参阅云雀备忘单。其他来源使用::=分隔符,例如atom ebnf 包。
有确定的答案吗?官方ISO 规范似乎建议“定义符号”应该是,=但规范中似乎有回旋余地。那么为什么会有不同的版本呢?
我已经能够通过发送 HTTP GET 来获取指标,如下所示:
# TYPE net_conntrack_dialer_conn_attempted_total untyped net_conntrack_dialer_conn_attempted_total{dialer_name="federate",instance="localhost:9090",job="prometheus"} 1 1608520832877
Run Code Online (Sandbox Code Playgroud)
现在我需要解析这些数据并获得对每条数据的控制,以便我可以像 json 一样转换 tand 格式。
有人可以指出我解析上述数据的正确方向吗?
我对编程有点陌生(好吧,非常新),我遇到了扩展巴科斯诺尔范式(EBNF),并决定尝试弄清楚如何使用它。不幸的是,尽管网上有大量关于 EBNF 如何工作的解释,但关于如何实际实现它的却很少。所以我使用它用 C 语言编写了一个简单的小程序,只是为了看看会发生什么。这是我写的:
#include <stdio.h>
#include <stdlib.h>
mixture : [letter|digit] {letter | digit};
integer : [ "+"|"-"] digit {digit};
naturalNumber : digit {digit};
digit : "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
letter : "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | …Run Code Online (Sandbox Code Playgroud) 我用弯曲和野牛为了使一个词法分析器和解析器为EBNF语法.这项工作完成了!我的意思是,当我把一个文件放入我写的程序时,我可以看到程序是否有错误.如果没有,我可以根据我使用的语法在屏幕上看到整个程序.我没有问题.
现在,我想使用循环处理和循环展开.我应该改变哪一部分?词法分析器?解析器?还是解析器之后的主要?如何?
根据正式的Pascal EBNF定义(pg69-75),我看到Pascal只支持3种原始类型:Integer,Real和String.
在C中,任何不同的值都0可以解释为true文字.Pascal不像C一样工作.当Pascal没有布尔类型时,它如何处理条件表达式?
ebnf ×6
grammar ×3
bison ×1
bnf ×1
c ×1
declaration ×1
flex-lexer ×1
go ×1
loops ×1
parsing ×1
pascal ×1
pdf ×1
prometheus ×1
syntax ×1