类型语言的语法如下:
TYPE ::= TYPEVAR | PRIMITIVE_TYPE | FUNCTYPE | LISTTYPE;
PRIMITIVE_TYPE ::= ‘int’ | ‘float’ | ‘long’ | ‘string’;
TYPEVAR ::= ‘`’ VARNAME; // Note, the character is a backwards apostrophe!
VARNAME ::= [a-zA-Z][a-zA-Z0-9]*; // Initial letter, then can have numbers
FUNCTYPE ::= ‘(‘ ARGLIST ‘)’ -> TYPE | ‘(‘ ‘)’ -> TYPE;
ARGLIST ::= TYPE ‘,’ ARGLIST | TYPE;
LISTTYPE ::= ‘[‘ TYPE ‘]’;
我的输入是这样的:TYPE
例如,如果我输入 (int,int)->float,这是有效的。如果我输入 ( [int] , int),则它的类型错误且无效。
我需要解析来自键盘的输入并决定它在此语法下是否有效(用于以后的类型推断)。但是,我不知道如何使用 go 构建此语法以及如何解析每个字节的输入。是否有任何提示或类似的实现?这将非常有帮助。
波斯汪
相关分类