我目前正在使用 alex 和快乐的词法分析器/解析器生成器来实现以太坊智能合约语言可靠性的解析器。目前我正在使用简化的语法来简化初始开发。
我在解析我的测试合同文件的“合同”部分时遇到错误。
以下是语法的代码:
ProgSource :: { ProgSource }
ProgSource : SourceUnit { ProgSource $1 }
SourceUnit : PragmaDirective { SourceUnit $1}
PragmaDirective : "pragma" ident ";" {Pragma $2 }
| {- empty -} { [] }
ImportDirective :
"import" stringLiteral ";" { ImportDir $2 }
ContractDefinition : contract ident "{" ContractPart "}" { Contract $2 $3 }
ContractPart : StateVarDecl { ContractPart $1 }
StateVarDecl : TypeName "public" ident ";" { StateVar $1 $3 }
| TypeName "public" ident "=" Expression ";" { StateV $1 $3 $5 }
以下文件是我的测试“合同”:
pragma solidity;
contract identifier12 {
public variable = 1;
}
结果是将我的测试合同传递给我的解析器的主要功能。
$ cat test.txt | ./main
main: Parse error at TContract (AlexPn 17 2 1)2:1
CallStack (from HasCallStack):
error, called at ./Parser.hs:232:3 in main:Parser
从错误中它表明问题是第 2 行第 1 列上的“合同”令牌的第一个字母。但据我了解,这应该正确解析吗?