Source type Integer_1024 is - 2 ** 1023 .. ( 2 ** 1023 ) - 1 ; Parser Lexical ( output ) -- At this point the compiler only knows key words, symbols, -- identifiers and numbers ( Integers, Reals ) token_type token_identifier := "Integer_1024" token_is token_minus token_Number := 2 token_exponent token_Number := 1023 token_double_dot token_left_parenthesis token_Number := 2 token_exponent token_Number := 1023 token_right_parenthesis token_minus token_Number := 1 token_semicolon Syntactic ( output ) Scan tokens and reports syntactic errors Flag => No_Errors In , Shark8 writes: >On 25-Jun-14 20:04, Yannick Duchêne (Hibou57) wrote: >> Le Thu, 19 Jun 2014 22:59:38 +0200, Randy Brukardt >> a écrit: >> >>> "Peter Chapin" wrote in message >>> news:tYmdnRDwdcBVTz_ORVn_vwA@giganews.com... >>> ... >>>> My understand is that parsing Ada requires name resolution to resolve >>>> syntactic ambiguities. >>> >>> Definitely not. Janus/Ada uses a table-driver parser that has >>> absolutely no >>> semantic information. There has to be a bit of care in tokenizing (for >>> the >>> infamous T'('A') example) but parsing is completely normal. >> >> If “definitely not”, how do you make “F(A)” and “G(A)” distinct, when F >> is a sub‑program and G an array? (the most famous example). Don't you >> use name resolution there? Or else do you use an intermediate construct, >> like array access temporarily seen as a function? If not this, how? > >You don't need to make them distinct, at least not at the >tokenizer-level. Determining what Some_Name(Some_Parameter) is within >the realm of the semantic-analysis as Some_Name could refer to: a type, >a subprogram, an array... Some_Parameter could be a value or a subtype >[if Some_Name is a range-subtype], and all of these permutations are >semantic responsibility rather than syntactic.